|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ katex)\n/* harmony export */ });\n/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */ class SourceLocation {\n // The + prefix indicates that these fields aren't writeable\n // Lexer holding the input string.\n // Start offset, zero-based inclusive.\n // End offset, zero-based exclusive.\n constructor(lexer, start, end){\n this.lexer = void 0;\n this.start = void 0;\n this.end = void 0;\n this.lexer = lexer;\n this.start = start;\n this.end = end;\n }\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one's location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */ static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n}\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */ /**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */ class Token {\n // don't expand the token\n // used in \\noexpand\n constructor(text, loc){\n this.text = void 0;\n this.loc = void 0;\n this.noexpand = void 0;\n this.treatAsRelax = void 0;\n this.text = text;\n this.loc = loc;\n }\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */ range(endToken, text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n}\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */ class ParseError {\n // Error start position based on passed-in Token or ParseNode.\n // Length of affected text based on passed-in Token or ParseNode.\n // The underlying error message without any context added.\n constructor(message, token // An object providing position information\n ){\n this.name = void 0;\n this.position = void 0;\n this.length = void 0;\n this.rawMessage = void 0;\n var error = \"KaTeX parse error: \" + message;\n var start;\n var end;\n var loc = token && token.loc;\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n // Get the input\n var input = loc.lexer.input; // Prepend some information\n start = loc.start;\n end = loc.end;\n if (start === input.length) {\n error += \" at end of input: \";\n } else {\n error += \" at position \" + (start + 1) + \": \";\n } // Underline token in question using combining underscores\n var underlined = input.slice(start, end).replace(/[^]/g, \"$&̲\"); // Extract some context from the input and add it to the error\n var left;\n if (start > 15) {\n left = \"…\" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n var right;\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + \"…\";\n } else {\n right = input.slice(end);\n }\n error += left + underlined + right;\n } // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n // $FlowFixMe\n var self = new Error(error);\n self.name = \"ParseError\"; // $FlowFixMe\n self.__proto__ = ParseError.prototype;\n self.position = start;\n if (start != null && end != null) {\n self.length = end - start;\n }\n self.rawMessage = message;\n return self;\n }\n} // $FlowFixMe More hackery\nParseError.prototype.__proto__ = Error.prototype;\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */ /**\n * Return whether an element is contained in a list\n */ var contains = function contains(list, elem) {\n return list.indexOf(elem) !== -1;\n};\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */ var deflt = function deflt(setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\nvar uppercase = /([A-Z])/g;\nvar hyphenate = function hyphenate(str) {\n return str.replace(uppercase, \"-$1\").toLowerCase();\n};\nvar ESCAPE_LOOKUP = {\n \"&\": \"&\",\n \">\": \">\",\n \"<\": \"<\",\n '\"': \""\",\n \"'\": \"'\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */ function escape(text) {\n return String(text).replace(ESCAPE_REGEX, (match)=>ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */ var getBaseElem = function getBaseElem(group) {\n if (group.type === \"ordgroup\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"color\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"font\") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */ var isCharacterBox = function isCharacterBox(group) {\n var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\nvar assert = function assert(value) {\n if (!value) {\n throw new Error(\"Expected non-null, but got \" + String(value));\n }\n return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative).\n */ var protocolFromUrl = function protocolFromUrl(url) {\n var protocol = /^\\s*([^\\\\/#]*?)(?::|�*58|�*3a)/i.exec(url);\n return protocol != null ? protocol[1] : \"_relative\";\n};\nvar utils = {\n contains,\n deflt,\n escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl\n};\n/* eslint no-console:0 */ // TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n displayMode: {\n type: \"boolean\",\n description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n cli: \"-d, --display-mode\"\n },\n output: {\n type: {\n enum: [\n \"htmlAndMathml\",\n \"html\",\n \"mathml\"\n ]\n },\n description: \"Determines the markup language of the output.\",\n cli: \"-F, --format <type>\"\n },\n leqno: {\n type: \"boolean\",\n description: \"Render display math in leqno style (left-justified tags).\"\n },\n fleqn: {\n type: \"boolean\",\n description: \"Render display math flush left.\"\n },\n throwOnError: {\n type: \"boolean\",\n default: true,\n cli: \"-t, --no-throw-on-error\",\n cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n },\n errorColor: {\n type: \"string\",\n default: \"#cc0000\",\n cli: \"-c, --error-color <color>\",\n cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n cliProcessor: (color)=>\"#\" + color\n },\n macros: {\n type: \"object\",\n cli: \"-m, --macro <def>\",\n cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n cliDefault: [],\n cliProcessor: (def, defs)=>{\n defs.push(def);\n return defs;\n }\n },\n minRuleThickness: {\n type: \"number\",\n description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n processor: (t)=>Math.max(0, t),\n cli: \"--min-rule-thickness <size>\",\n cliProcessor: parseFloat\n },\n colorIsTextColor: {\n type: \"boolean\",\n description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n cli: \"-b, --color-is-text-color\"\n },\n strict: {\n type: [\n {\n enum: [\n \"warn\",\n \"ignore\",\n \"error\"\n ]\n },\n \"boolean\",\n \"function\"\n ],\n description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n cli: \"-S, --strict\",\n cliDefault: false\n },\n trust: {\n type: [\n \"boolean\",\n \"function\"\n ],\n description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n cli: \"-T, --trust\"\n },\n maxSize: {\n type: \"number\",\n default: Infinity,\n description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n processor: (s)=>Math.max(0, s),\n cli: \"-s, --max-size <n>\",\n cliProcessor: parseInt\n },\n maxExpand: {\n type: \"number\",\n default: 1000,\n description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n processor: (n)=>Math.max(0, n),\n cli: \"-e, --max-expand <n>\",\n cliProcessor: (n)=>n === \"Infinity\" ? Infinity : parseInt(n)\n },\n globalGroup: {\n type: \"boolean\",\n cli: false\n }\n};\nfunction getDefaultValue(schema) {\n if (schema.default) {\n return schema.default;\n }\n var type = schema.type;\n var defaultType = Array.isArray(type) ? type[0] : type;\n if (typeof defaultType !== \"string\") {\n return defaultType.enum[0];\n }\n switch(defaultType){\n case \"boolean\":\n return false;\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"object\":\n return {};\n }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n * - displayMode: Whether the expression should be typeset as inline math\n * (false, the default), meaning that the math starts in\n * \\textstyle and is placed in an inline-block); or as display\n * math (true), meaning that the math starts in \\displaystyle\n * and is placed in a block with vertical margin.\n */ class Settings {\n constructor(options){\n this.displayMode = void 0;\n this.output = void 0;\n this.leqno = void 0;\n this.fleqn = void 0;\n this.throwOnError = void 0;\n this.errorColor = void 0;\n this.macros = void 0;\n this.minRuleThickness = void 0;\n this.colorIsTextColor = void 0;\n this.strict = void 0;\n this.trust = void 0;\n this.maxSize = void 0;\n this.maxExpand = void 0;\n this.globalGroup = void 0;\n // allow null options\n options = options || {};\n for(var prop in SETTINGS_SCHEMA){\n if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n // $FlowFixMe\n var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n // $FlowFixMe\n this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n }\n }\n }\n /**\n * Report nonstrict (non-LaTeX-compatible) input.\n * Can safely not be called if `this.strict` is false in JavaScript.\n */ reportNonstrict(errorCode, errorMsg, token) {\n var strict = this.strict;\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n strict = strict(errorCode, errorMsg, token);\n }\n if (!strict || strict === \"ignore\") {\n return;\n } else if (strict === true || strict === \"error\") {\n throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n }\n }\n /**\n * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n * input (like `\\\\`). Unlike `nonstrict`, will not throw an error;\n * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n * translates to a return value of `false`. May still print a warning:\n * \"warn\" prints a warning and returns `false`.\n * This is for the second category of `errorCode`s listed in the README.\n */ useStrictBehavior(errorCode, errorMsg, token) {\n var strict = this.strict;\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n // But catch any exceptions thrown by function, treating them\n // like \"error\".\n try {\n strict = strict(errorCode, errorMsg, token);\n } catch (error) {\n strict = \"error\";\n }\n }\n if (!strict || strict === \"ignore\") {\n return false;\n } else if (strict === true || strict === \"error\") {\n return true;\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n }\n }\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */ isTrusted(context) {\n if (context.url && !context.protocol) {\n context.protocol = utils.protocolFromUrl(context.url);\n }\n var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n}\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */ /**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */ class Style {\n constructor(id, size, cramped){\n this.id = void 0;\n this.size = void 0;\n this.cramped = void 0;\n this.id = id;\n this.size = size;\n this.cramped = cramped;\n }\n /**\n * Get the style of a superscript given a base in the current style.\n */ sup() {\n return styles[sup[this.id]];\n }\n /**\n * Get the style of a subscript given a base in the current style.\n */ sub() {\n return styles[sub[this.id]];\n }\n /**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */ fracNum() {\n return styles[fracNum[this.id]];\n }\n /**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */ fracDen() {\n return styles[fracDen[this.id]];\n }\n /**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn't change the style).\n */ cramp() {\n return styles[cramp[this.id]];\n }\n /**\n * Get a text or display version of this style.\n */ text() {\n return styles[text$1[this.id]];\n }\n /**\n * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n */ isTight() {\n return this.size >= 2;\n }\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\nvar styles = [\n new Style(D, 0, false),\n new Style(Dc, 0, true),\n new Style(T, 1, false),\n new Style(Tc, 1, true),\n new Style(S, 2, false),\n new Style(Sc, 2, true),\n new Style(SS, 3, false),\n new Style(SSc, 3, true)\n]; // Lookup tables for switching from one style to another\nvar sup = [\n S,\n Sc,\n S,\n Sc,\n SS,\n SSc,\n SS,\n SSc\n];\nvar sub = [\n Sc,\n Sc,\n Sc,\n Sc,\n SSc,\n SSc,\n SSc,\n SSc\n];\nvar fracNum = [\n T,\n Tc,\n S,\n Sc,\n SS,\n SSc,\n SS,\n SSc\n];\nvar fracDen = [\n Tc,\n Tc,\n Sc,\n Sc,\n SSc,\n SSc,\n SSc,\n SSc\n];\nvar cramp = [\n Dc,\n Dc,\n Tc,\n Tc,\n Sc,\n Sc,\n SSc,\n SSc\n];\nvar text$1 = [\n D,\n Dc,\n T,\n Tc,\n T,\n Tc,\n T,\n Tc\n]; // We only export some of the styles.\nvar Style$1 = {\n DISPLAY: styles[D],\n TEXT: styles[T],\n SCRIPT: styles[S],\n SCRIPTSCRIPT: styles[SS]\n};\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */ /**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */ /**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */ var scriptData = [\n {\n // Latin characters beyond the Latin-1 characters we have metrics for.\n // Needed for Czech, Hungarian and Turkish text, for example.\n name: \"latin\",\n blocks: [\n [\n 0x0100,\n 0x024f\n ],\n [\n 0x0300,\n 0x036f\n ] // Combining Diacritical marks\n ]\n },\n {\n // The Cyrillic script used by Russian and related languages.\n // A Cyrillic subset used to be supported as explicitly defined\n // symbols in symbols.js\n name: \"cyrillic\",\n blocks: [\n [\n 0x0400,\n 0x04ff\n ]\n ]\n },\n {\n // Armenian\n name: \"armenian\",\n blocks: [\n [\n 0x0530,\n 0x058F\n ]\n ]\n },\n {\n // The Brahmic scripts of South and Southeast Asia\n // Devanagari (0900–097F)\n // Bengali (0980–09FF)\n // Gurmukhi (0A00–0A7F)\n // Gujarati (0A80–0AFF)\n // Oriya (0B00–0B7F)\n // Tamil (0B80–0BFF)\n // Telugu (0C00–0C7F)\n // Kannada (0C80–0CFF)\n // Malayalam (0D00–0D7F)\n // Sinhala (0D80–0DFF)\n // Thai (0E00–0E7F)\n // Lao (0E80–0EFF)\n // Tibetan (0F00–0FFF)\n // Myanmar (1000–109F)\n name: \"brahmic\",\n blocks: [\n [\n 0x0900,\n 0x109F\n ]\n ]\n },\n {\n name: \"georgian\",\n blocks: [\n [\n 0x10A0,\n 0x10ff\n ]\n ]\n },\n {\n // Chinese and Japanese.\n // The \"k\" in cjk is for Korean, but we've separated Korean out\n name: \"cjk\",\n blocks: [\n [\n 0x3000,\n 0x30FF\n ],\n [\n 0x4E00,\n 0x9FAF\n ],\n [\n 0xFF00,\n 0xFF60\n ] // Fullwidth punctuation\n ]\n },\n {\n // Korean\n name: \"hangul\",\n blocks: [\n [\n 0xAC00,\n 0xD7AF\n ]\n ]\n }\n];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */ function scriptFromCodepoint(codepoint) {\n for(var i = 0; i < scriptData.length; i++){\n var script = scriptData[i];\n for(var _i = 0; _i < script.blocks.length; _i++){\n var block = script.blocks[_i];\n if (codepoint >= block[0] && codepoint <= block[1]) {\n return script.name;\n }\n }\n }\n return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */ var allBlocks = [];\nscriptData.forEach((s)=>s.blocks.forEach((b)=>allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */ function supportedCodepoint(codepoint) {\n for(var i = 0; i < allBlocks.length; i += 2){\n if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n return true;\n }\n }\n return false;\n}\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */ // In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n/* vinculum\n /\n /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraVinculum\n / █████████████████████←0.04em (40 unit) std vinculum thickness\n / /\n / /\n / /\\\n / / surd\n*/ var sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\nvar phasePath = function phasePath(y) {\n var x = y / 2; // x coordinate at top of angle\n return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n // One path edge has a variable length. It runs vertically from the vinculum\n // to a point near (14 units) the bottom of the surd. The vinculum\n // is normally 40 units thick. So the length of the line in question is:\n var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n var path = \"\";\n switch(size){\n case \"sqrtMain\":\n path = sqrtMain(extraVinculum, hLinePad);\n break;\n case \"sqrtSize1\":\n path = sqrtSize1(extraVinculum, hLinePad);\n break;\n case \"sqrtSize2\":\n path = sqrtSize2(extraVinculum, hLinePad);\n break;\n case \"sqrtSize3\":\n path = sqrtSize3(extraVinculum, hLinePad);\n break;\n case \"sqrtSize4\":\n path = sqrtSize4(extraVinculum, hLinePad);\n break;\n case \"sqrtTall\":\n path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n }\n return path;\n};\nvar innerPath = function innerPath(name, height) {\n // The inner part of stretchy tall delimiters\n switch(name){\n case \"⎜\":\n return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n case \"∣\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n case \"∥\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n case \"⎟\":\n return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n case \"⎢\":\n return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n case \"⎥\":\n return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n case \"⎪\":\n return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n case \"⏐\":\n return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n case \"‖\":\n return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n default:\n return \"\";\n }\n};\nvar path = {\n // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n // leftarrow is from glyph U+2190 in font KaTeX Main\n leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n // overgroup is from the MnSymbol package (public domain)\n leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n // Harpoons are from glyph U+21BD in font KaTeX Main\n leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n // hook is from glyph U+21A9 in font KaTeX Main\n lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n // tilde1 is a modified version of a glyph from the MnSymbol package\n tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n // ditto tilde2, tilde3, & tilde4\n tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n // vec is from glyph U+20D7 in font KaTeX Main\n vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n // widehat1 is a modified version of a glyph from the MnSymbol package\n widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n // ditto widehat2, widehat3, & widehat4\n widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n // widecheck paths are all inverted versions of widehat\n widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n // The next ten paths support reaction arrows from the mhchem package.\n // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n switch(label){\n case \"lbrack\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n case \"rbrack\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n case \"vert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n case \"doublevert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n case \"lfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n case \"rfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n case \"lceil\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n case \"rceil\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n case \"lparen\":\n return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n case \"rparen\":\n return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n default:\n // We should not ever get here.\n throw new Error(\"Unknown stretchy delimiter.\");\n }\n};\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */ class DocumentFragment {\n // HtmlDomNode\n // Never used; needed for satisfying interface.\n constructor(children){\n this.children = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.children = children;\n this.classes = [];\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = {};\n }\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n /** Convert the fragment into a node. */ toNode() {\n var frag = document.createDocumentFragment();\n for(var i = 0; i < this.children.length; i++){\n frag.appendChild(this.children[i].toNode());\n }\n return frag;\n }\n /** Convert the fragment into HTML markup. */ toMarkup() {\n var markup = \"\"; // Simply concatenate the markup for the children together.\n for(var i = 0; i < this.children.length; i++){\n markup += this.children[i].toMarkup();\n }\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode's only.\n */ toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n // $FlowFixMe: Only works for ChildType = MathDomNode.\n var toText = (child)=>child.toText();\n return this.children.map(toText).join(\"\");\n }\n}\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n \"AMS-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"65\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"66\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"67\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"68\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"69\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"70\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.61111\n ],\n \"71\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.77778\n ],\n \"72\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.77778\n ],\n \"73\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.38889\n ],\n \"74\": [\n 0.16667,\n 0.68889,\n 0,\n 0,\n 0.5\n ],\n \"75\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.77778\n ],\n \"76\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"77\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.94445\n ],\n \"78\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"79\": [\n 0.16667,\n 0.68889,\n 0,\n 0,\n 0.77778\n ],\n \"80\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.61111\n ],\n \"81\": [\n 0.16667,\n 0.68889,\n 0,\n 0,\n 0.77778\n ],\n \"82\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"83\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.55556\n ],\n \"84\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"85\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"86\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"87\": [\n 0,\n 0.68889,\n 0,\n 0,\n 1.0\n ],\n \"88\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"89\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"90\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"107\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.55556\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"165\": [\n 0,\n 0.675,\n 0.025,\n 0,\n 0.75\n ],\n \"174\": [\n 0.15559,\n 0.69224,\n 0,\n 0,\n 0.94666\n ],\n \"240\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.55556\n ],\n \"295\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.54028\n ],\n \"710\": [\n 0,\n 0.825,\n 0,\n 0,\n 2.33334\n ],\n \"732\": [\n 0,\n 0.9,\n 0,\n 0,\n 2.33334\n ],\n \"770\": [\n 0,\n 0.825,\n 0,\n 0,\n 2.33334\n ],\n \"771\": [\n 0,\n 0.9,\n 0,\n 0,\n 2.33334\n ],\n \"989\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"1008\": [\n 0,\n 0.43056,\n 0.04028,\n 0,\n 0.66667\n ],\n \"8245\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.275\n ],\n \"8463\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.54028\n ],\n \"8487\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"8498\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.55556\n ],\n \"8502\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"8503\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.44445\n ],\n \"8504\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.66667\n ],\n \"8513\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.63889\n ],\n \"8592\": [\n -0.03598,\n 0.46402,\n 0,\n 0,\n 0.5\n ],\n \"8594\": [\n -0.03598,\n 0.46402,\n 0,\n 0,\n 0.5\n ],\n \"8602\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8603\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8606\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.0\n ],\n \"8608\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.0\n ],\n \"8610\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.11111\n ],\n \"8611\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.11111\n ],\n \"8619\": [\n 0,\n 0.54986,\n 0,\n 0,\n 1.0\n ],\n \"8620\": [\n 0,\n 0.54986,\n 0,\n 0,\n 1.0\n ],\n \"8621\": [\n -0.13313,\n 0.37788,\n 0,\n 0,\n 1.38889\n ],\n \"8622\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8624\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.5\n ],\n \"8625\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.5\n ],\n \"8630\": [\n 0,\n 0.43056,\n 0,\n 0,\n 1.0\n ],\n \"8631\": [\n 0,\n 0.43056,\n 0,\n 0,\n 1.0\n ],\n \"8634\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8635\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8638\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.41667\n ],\n \"8639\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.41667\n ],\n \"8642\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.41667\n ],\n \"8643\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.41667\n ],\n \"8644\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 1.0\n ],\n \"8646\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 1.0\n ],\n \"8647\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 1.0\n ],\n \"8648\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.83334\n ],\n \"8649\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 1.0\n ],\n \"8650\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.83334\n ],\n \"8651\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.0\n ],\n \"8652\": [\n 0.01354,\n 0.52239,\n 0,\n 0,\n 1.0\n ],\n \"8653\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8654\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8655\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8666\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 1.0\n ],\n \"8667\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 1.0\n ],\n \"8669\": [\n -0.13313,\n 0.37788,\n 0,\n 0,\n 1.0\n ],\n \"8672\": [\n -0.064,\n 0.437,\n 0,\n 0,\n 1.334\n ],\n \"8674\": [\n -0.064,\n 0.437,\n 0,\n 0,\n 1.334\n ],\n \"8705\": [\n 0,\n 0.825,\n 0,\n 0,\n 0.5\n ],\n \"8708\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.55556\n ],\n \"8709\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8717\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.42917\n ],\n \"8722\": [\n -0.03598,\n 0.46402,\n 0,\n 0,\n 0.5\n ],\n \"8724\": [\n 0.08198,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8726\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8733\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8736\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.72222\n ],\n \"8737\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.72222\n ],\n \"8738\": [\n 0.03517,\n 0.52239,\n 0,\n 0,\n 0.72222\n ],\n \"8739\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.22222\n ],\n \"8740\": [\n 0.25142,\n 0.74111,\n 0,\n 0,\n 0.27778\n ],\n \"8741\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.38889\n ],\n \"8742\": [\n 0.25142,\n 0.74111,\n 0,\n 0,\n 0.5\n ],\n \"8756\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.66667\n ],\n \"8757\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.66667\n ],\n \"8764\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 0.77778\n ],\n \"8765\": [\n -0.13313,\n 0.37788,\n 0,\n 0,\n 0.77778\n ],\n \"8769\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 0.77778\n ],\n \"8770\": [\n -0.03625,\n 0.46375,\n 0,\n 0,\n 0.77778\n ],\n \"8774\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8776\": [\n -0.01688,\n 0.48312,\n 0,\n 0,\n 0.77778\n ],\n \"8778\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8782\": [\n 0.06062,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8783\": [\n 0.06062,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8785\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8786\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8787\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8790\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8791\": [\n 0.22958,\n 0.72958,\n 0,\n 0,\n 0.77778\n ],\n \"8796\": [\n 0.08198,\n 0.91667,\n 0,\n 0,\n 0.77778\n ],\n \"8806\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"8807\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"8808\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"8809\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"8812\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.5\n ],\n \"8814\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8815\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8816\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8817\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8818\": [\n 0.22958,\n 0.72958,\n 0,\n 0,\n 0.77778\n ],\n \"8819\": [\n 0.22958,\n 0.72958,\n 0,\n 0,\n 0.77778\n ],\n \"8822\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8823\": [\n 0.1808,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8828\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8829\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8830\": [\n 0.22958,\n 0.72958,\n 0,\n 0,\n 0.77778\n ],\n \"8831\": [\n 0.22958,\n 0.72958,\n 0,\n 0,\n 0.77778\n ],\n \"8832\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8833\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8840\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8841\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8842\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8843\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8847\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8848\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8858\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8859\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8861\": [\n 0.08198,\n 0.58198,\n 0,\n 0,\n 0.77778\n ],\n \"8862\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8863\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8864\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8865\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"8872\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.61111\n ],\n \"8873\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.72222\n ],\n \"8874\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.88889\n ],\n \"8876\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.61111\n ],\n \"8877\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.61111\n ],\n \"8878\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"8879\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.72222\n ],\n \"8882\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8883\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8884\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8885\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8888\": [\n 0,\n 0.54986,\n 0,\n 0,\n 1.11111\n ],\n \"8890\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.55556\n ],\n \"8891\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.61111\n ],\n \"8892\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.61111\n ],\n \"8901\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.27778\n ],\n \"8903\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8905\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8906\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"8907\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8908\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8909\": [\n -0.03598,\n 0.46402,\n 0,\n 0,\n 0.77778\n ],\n \"8910\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.76042\n ],\n \"8911\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.76042\n ],\n \"8912\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8913\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"8914\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.66667\n ],\n \"8915\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.66667\n ],\n \"8916\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.66667\n ],\n \"8918\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8919\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8920\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 1.33334\n ],\n \"8921\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 1.33334\n ],\n \"8922\": [\n 0.38569,\n 0.88569,\n 0,\n 0,\n 0.77778\n ],\n \"8923\": [\n 0.38569,\n 0.88569,\n 0,\n 0,\n 0.77778\n ],\n \"8926\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8927\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"8928\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8929\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8934\": [\n 0.23222,\n 0.74111,\n 0,\n 0,\n 0.77778\n ],\n \"8935\": [\n 0.23222,\n 0.74111,\n 0,\n 0,\n 0.77778\n ],\n \"8936\": [\n 0.23222,\n 0.74111,\n 0,\n 0,\n 0.77778\n ],\n \"8937\": [\n 0.23222,\n 0.74111,\n 0,\n 0,\n 0.77778\n ],\n \"8938\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8939\": [\n 0.20576,\n 0.70576,\n 0,\n 0,\n 0.77778\n ],\n \"8940\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8941\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"8994\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"8995\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.77778\n ],\n \"9416\": [\n 0.15559,\n 0.69224,\n 0,\n 0,\n 0.90222\n ],\n \"9484\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.5\n ],\n \"9488\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.5\n ],\n \"9492\": [\n 0,\n 0.37788,\n 0,\n 0,\n 0.5\n ],\n \"9496\": [\n 0,\n 0.37788,\n 0,\n 0,\n 0.5\n ],\n \"9585\": [\n 0.19444,\n 0.68889,\n 0,\n 0,\n 0.88889\n ],\n \"9586\": [\n 0.19444,\n 0.74111,\n 0,\n 0,\n 0.88889\n ],\n \"9632\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"9633\": [\n 0,\n 0.675,\n 0,\n 0,\n 0.77778\n ],\n \"9650\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.72222\n ],\n \"9651\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.72222\n ],\n \"9654\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"9660\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.72222\n ],\n \"9661\": [\n 0,\n 0.54986,\n 0,\n 0,\n 0.72222\n ],\n \"9664\": [\n 0.03517,\n 0.54986,\n 0,\n 0,\n 0.77778\n ],\n \"9674\": [\n 0.11111,\n 0.69224,\n 0,\n 0,\n 0.66667\n ],\n \"9733\": [\n 0.19444,\n 0.69224,\n 0,\n 0,\n 0.94445\n ],\n \"10003\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.83334\n ],\n \"10016\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.83334\n ],\n \"10731\": [\n 0.11111,\n 0.69224,\n 0,\n 0,\n 0.66667\n ],\n \"10846\": [\n 0.19444,\n 0.75583,\n 0,\n 0,\n 0.61111\n ],\n \"10877\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"10878\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"10885\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"10886\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"10887\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"10888\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"10889\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10890\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10891\": [\n 0.48256,\n 0.98256,\n 0,\n 0,\n 0.77778\n ],\n \"10892\": [\n 0.48256,\n 0.98256,\n 0,\n 0,\n 0.77778\n ],\n \"10901\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"10902\": [\n 0.13667,\n 0.63667,\n 0,\n 0,\n 0.77778\n ],\n \"10933\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10934\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10935\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10936\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10937\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10938\": [\n 0.26167,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"10949\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"10950\": [\n 0.25583,\n 0.75583,\n 0,\n 0,\n 0.77778\n ],\n \"10955\": [\n 0.28481,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"10956\": [\n 0.28481,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"57350\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.22222\n ],\n \"57351\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.38889\n ],\n \"57352\": [\n 0.08167,\n 0.58167,\n 0,\n 0,\n 0.77778\n ],\n \"57353\": [\n 0,\n 0.43056,\n 0.04028,\n 0,\n 0.66667\n ],\n \"57356\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57357\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57358\": [\n 0.41951,\n 0.91951,\n 0,\n 0,\n 0.77778\n ],\n \"57359\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"57360\": [\n 0.30274,\n 0.79383,\n 0,\n 0,\n 0.77778\n ],\n \"57361\": [\n 0.41951,\n 0.91951,\n 0,\n 0,\n 0.77778\n ],\n \"57366\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57367\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57368\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57369\": [\n 0.25142,\n 0.75726,\n 0,\n 0,\n 0.77778\n ],\n \"57370\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"57371\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ]\n },\n \"Caligraphic-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"65\": [\n 0,\n 0.68333,\n 0,\n 0.19445,\n 0.79847\n ],\n \"66\": [\n 0,\n 0.68333,\n 0.03041,\n 0.13889,\n 0.65681\n ],\n \"67\": [\n 0,\n 0.68333,\n 0.05834,\n 0.13889,\n 0.52653\n ],\n \"68\": [\n 0,\n 0.68333,\n 0.02778,\n 0.08334,\n 0.77139\n ],\n \"69\": [\n 0,\n 0.68333,\n 0.08944,\n 0.11111,\n 0.52778\n ],\n \"70\": [\n 0,\n 0.68333,\n 0.09931,\n 0.11111,\n 0.71875\n ],\n \"71\": [\n 0.09722,\n 0.68333,\n 0.0593,\n 0.11111,\n 0.59487\n ],\n \"72\": [\n 0,\n 0.68333,\n 0.00965,\n 0.11111,\n 0.84452\n ],\n \"73\": [\n 0,\n 0.68333,\n 0.07382,\n 0,\n 0.54452\n ],\n \"74\": [\n 0.09722,\n 0.68333,\n 0.18472,\n 0.16667,\n 0.67778\n ],\n \"75\": [\n 0,\n 0.68333,\n 0.01445,\n 0.05556,\n 0.76195\n ],\n \"76\": [\n 0,\n 0.68333,\n 0,\n 0.13889,\n 0.68972\n ],\n \"77\": [\n 0,\n 0.68333,\n 0,\n 0.13889,\n 1.2009\n ],\n \"78\": [\n 0,\n 0.68333,\n 0.14736,\n 0.08334,\n 0.82049\n ],\n \"79\": [\n 0,\n 0.68333,\n 0.02778,\n 0.11111,\n 0.79611\n ],\n \"80\": [\n 0,\n 0.68333,\n 0.08222,\n 0.08334,\n 0.69556\n ],\n \"81\": [\n 0.09722,\n 0.68333,\n 0,\n 0.11111,\n 0.81667\n ],\n \"82\": [\n 0,\n 0.68333,\n 0,\n 0.08334,\n 0.8475\n ],\n \"83\": [\n 0,\n 0.68333,\n 0.075,\n 0.13889,\n 0.60556\n ],\n \"84\": [\n 0,\n 0.68333,\n 0.25417,\n 0,\n 0.54464\n ],\n \"85\": [\n 0,\n 0.68333,\n 0.09931,\n 0.08334,\n 0.62583\n ],\n \"86\": [\n 0,\n 0.68333,\n 0.08222,\n 0,\n 0.61278\n ],\n \"87\": [\n 0,\n 0.68333,\n 0.08222,\n 0.08334,\n 0.98778\n ],\n \"88\": [\n 0,\n 0.68333,\n 0.14643,\n 0.13889,\n 0.7133\n ],\n \"89\": [\n 0.09722,\n 0.68333,\n 0.08222,\n 0.08334,\n 0.66834\n ],\n \"90\": [\n 0,\n 0.68333,\n 0.07944,\n 0.13889,\n 0.72473\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ]\n },\n \"Fraktur-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.29574\n ],\n \"34\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.21471\n ],\n \"38\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.73786\n ],\n \"39\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.21201\n ],\n \"40\": [\n 0.24982,\n 0.74947,\n 0,\n 0,\n 0.38865\n ],\n \"41\": [\n 0.24982,\n 0.74947,\n 0,\n 0,\n 0.38865\n ],\n \"42\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.27764\n ],\n \"43\": [\n 0.08319,\n 0.58283,\n 0,\n 0,\n 0.75623\n ],\n \"44\": [\n 0,\n 0.10803,\n 0,\n 0,\n 0.27764\n ],\n \"45\": [\n 0.08319,\n 0.58283,\n 0,\n 0,\n 0.75623\n ],\n \"46\": [\n 0,\n 0.10803,\n 0,\n 0,\n 0.27764\n ],\n \"47\": [\n 0.24982,\n 0.74947,\n 0,\n 0,\n 0.50181\n ],\n \"48\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"49\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"50\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"51\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"52\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"53\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"54\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.50181\n ],\n \"55\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"56\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.50181\n ],\n \"57\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50181\n ],\n \"58\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.21606\n ],\n \"59\": [\n 0.12604,\n 0.47534,\n 0,\n 0,\n 0.21606\n ],\n \"61\": [\n -0.13099,\n 0.36866,\n 0,\n 0,\n 0.75623\n ],\n \"63\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.36245\n ],\n \"65\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.7176\n ],\n \"66\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.88397\n ],\n \"67\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.61254\n ],\n \"68\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.83158\n ],\n \"69\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.66278\n ],\n \"70\": [\n 0.12604,\n 0.69141,\n 0,\n 0,\n 0.61119\n ],\n \"71\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.78539\n ],\n \"72\": [\n 0.06302,\n 0.69141,\n 0,\n 0,\n 0.7203\n ],\n \"73\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.55448\n ],\n \"74\": [\n 0.12604,\n 0.69141,\n 0,\n 0,\n 0.55231\n ],\n \"75\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.66845\n ],\n \"76\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.66602\n ],\n \"77\": [\n 0,\n 0.69141,\n 0,\n 0,\n 1.04953\n ],\n \"78\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.83212\n ],\n \"79\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.82699\n ],\n \"80\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.82753\n ],\n \"81\": [\n 0.03781,\n 0.69141,\n 0,\n 0,\n 0.82699\n ],\n \"82\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.82807\n ],\n \"83\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.82861\n ],\n \"84\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.66899\n ],\n \"85\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.64576\n ],\n \"86\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.83131\n ],\n \"87\": [\n 0,\n 0.69141,\n 0,\n 0,\n 1.04602\n ],\n \"88\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.71922\n ],\n \"89\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.83293\n ],\n \"90\": [\n 0.12604,\n 0.69141,\n 0,\n 0,\n 0.60201\n ],\n \"91\": [\n 0.24982,\n 0.74947,\n 0,\n 0,\n 0.27764\n ],\n \"93\": [\n 0.24982,\n 0.74947,\n 0,\n 0,\n 0.27764\n ],\n \"94\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.49965\n ],\n \"97\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.50046\n ],\n \"98\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.51315\n ],\n \"99\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.38946\n ],\n \"100\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.49857\n ],\n \"101\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.40053\n ],\n \"102\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.32626\n ],\n \"103\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.5037\n ],\n \"104\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.52126\n ],\n \"105\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.27899\n ],\n \"106\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.28088\n ],\n \"107\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.38946\n ],\n \"108\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.27953\n ],\n \"109\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.76676\n ],\n \"110\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.52666\n ],\n \"111\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.48885\n ],\n \"112\": [\n 0.18906,\n 0.52396,\n 0,\n 0,\n 0.50046\n ],\n \"113\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.48912\n ],\n \"114\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.38919\n ],\n \"115\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.44266\n ],\n \"116\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.33301\n ],\n \"117\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.5172\n ],\n \"118\": [\n 0,\n 0.52396,\n 0,\n 0,\n 0.5118\n ],\n \"119\": [\n 0,\n 0.52396,\n 0,\n 0,\n 0.77351\n ],\n \"120\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.38865\n ],\n \"121\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.49884\n ],\n \"122\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.39054\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"8216\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.21471\n ],\n \"8217\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.21471\n ],\n \"58112\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.49749\n ],\n \"58113\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.4983\n ],\n \"58114\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.33328\n ],\n \"58115\": [\n 0.18906,\n 0.69141,\n 0,\n 0,\n 0.32923\n ],\n \"58116\": [\n 0.18906,\n 0.47534,\n 0,\n 0,\n 0.50343\n ],\n \"58117\": [\n 0,\n 0.69141,\n 0,\n 0,\n 0.33301\n ],\n \"58118\": [\n 0,\n 0.62119,\n 0,\n 0,\n 0.33409\n ],\n \"58119\": [\n 0,\n 0.47534,\n 0,\n 0,\n 0.50073\n ]\n },\n \"Main-Bold\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.35\n ],\n \"34\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.60278\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.95833\n ],\n \"36\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.95833\n ],\n \"38\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"39\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44722\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44722\n ],\n \"42\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"43\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"44\": [\n 0.19444,\n 0.15556,\n 0,\n 0,\n 0.31944\n ],\n \"45\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.38333\n ],\n \"46\": [\n 0,\n 0.15556,\n 0,\n 0,\n 0.31944\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"48\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"49\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"50\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"51\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"52\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"53\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"54\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"55\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"56\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"57\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"58\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.31944\n ],\n \"59\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.31944\n ],\n \"60\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"61\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 0.89444\n ],\n \"62\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"63\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.54305\n ],\n \"64\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"65\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.86944\n ],\n \"66\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.81805\n ],\n \"67\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.83055\n ],\n \"68\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.88194\n ],\n \"69\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.75555\n ],\n \"70\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.72361\n ],\n \"71\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.90416\n ],\n \"72\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.9\n ],\n \"73\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.43611\n ],\n \"74\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.59444\n ],\n \"75\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.90138\n ],\n \"76\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.69166\n ],\n \"77\": [\n 0,\n 0.68611,\n 0,\n 0,\n 1.09166\n ],\n \"78\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.9\n ],\n \"79\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.86388\n ],\n \"80\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.78611\n ],\n \"81\": [\n 0.19444,\n 0.68611,\n 0,\n 0,\n 0.86388\n ],\n \"82\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.8625\n ],\n \"83\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.63889\n ],\n \"84\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.8\n ],\n \"85\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.88472\n ],\n \"86\": [\n 0,\n 0.68611,\n 0.01597,\n 0,\n 0.86944\n ],\n \"87\": [\n 0,\n 0.68611,\n 0.01597,\n 0,\n 1.18888\n ],\n \"88\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.86944\n ],\n \"89\": [\n 0,\n 0.68611,\n 0.02875,\n 0,\n 0.86944\n ],\n \"90\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.70277\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.31944\n ],\n \"92\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.31944\n ],\n \"94\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"95\": [\n 0.31,\n 0.13444,\n 0.03194,\n 0,\n 0.575\n ],\n \"97\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.55902\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"99\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.51111\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"101\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.52708\n ],\n \"102\": [\n 0,\n 0.69444,\n 0.10903,\n 0,\n 0.35139\n ],\n \"103\": [\n 0.19444,\n 0.44444,\n 0.01597,\n 0,\n 0.575\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"105\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"106\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.35139\n ],\n \"107\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.60694\n ],\n \"108\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"109\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.95833\n ],\n \"110\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.63889\n ],\n \"111\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"112\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.63889\n ],\n \"113\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.60694\n ],\n \"114\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.47361\n ],\n \"115\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.45361\n ],\n \"116\": [\n 0,\n 0.63492,\n 0,\n 0,\n 0.44722\n ],\n \"117\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.63889\n ],\n \"118\": [\n 0,\n 0.44444,\n 0.01597,\n 0,\n 0.60694\n ],\n \"119\": [\n 0,\n 0.44444,\n 0.01597,\n 0,\n 0.83055\n ],\n \"120\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.60694\n ],\n \"121\": [\n 0.19444,\n 0.44444,\n 0.01597,\n 0,\n 0.60694\n ],\n \"122\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.51111\n ],\n \"123\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"124\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.31944\n ],\n \"125\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"126\": [\n 0.35,\n 0.34444,\n 0,\n 0,\n 0.575\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"163\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.86853\n ],\n \"168\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"172\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.76666\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.86944\n ],\n \"177\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.51111\n ],\n \"198\": [\n 0,\n 0.68611,\n 0,\n 0,\n 1.04166\n ],\n \"215\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"216\": [\n 0.04861,\n 0.73472,\n 0,\n 0,\n 0.89444\n ],\n \"223\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.59722\n ],\n \"230\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.83055\n ],\n \"247\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"248\": [\n 0.09722,\n 0.54167,\n 0,\n 0,\n 0.575\n ],\n \"305\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.31944\n ],\n \"338\": [\n 0,\n 0.68611,\n 0,\n 0,\n 1.16944\n ],\n \"339\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.89444\n ],\n \"567\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.35139\n ],\n \"710\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"711\": [\n 0,\n 0.63194,\n 0,\n 0,\n 0.575\n ],\n \"713\": [\n 0,\n 0.59611,\n 0,\n 0,\n 0.575\n ],\n \"714\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"728\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"729\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.86944\n ],\n \"732\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"733\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"915\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.69166\n ],\n \"916\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.95833\n ],\n \"920\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.89444\n ],\n \"923\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.80555\n ],\n \"926\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.76666\n ],\n \"928\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.9\n ],\n \"931\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.83055\n ],\n \"933\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.89444\n ],\n \"934\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.83055\n ],\n \"936\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.89444\n ],\n \"937\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.83055\n ],\n \"8211\": [\n 0,\n 0.44444,\n 0.03194,\n 0,\n 0.575\n ],\n \"8212\": [\n 0,\n 0.44444,\n 0.03194,\n 0,\n 1.14999\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.60278\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.60278\n ],\n \"8224\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.51111\n ],\n \"8225\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.51111\n ],\n \"8242\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.34444\n ],\n \"8407\": [\n 0,\n 0.72444,\n 0.15486,\n 0,\n 0.575\n ],\n \"8463\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66759\n ],\n \"8465\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83055\n ],\n \"8467\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.47361\n ],\n \"8472\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.74027\n ],\n \"8476\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83055\n ],\n \"8501\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70277\n ],\n \"8592\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8593\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"8594\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8595\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.575\n ],\n \"8596\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8597\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"8598\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.14999\n ],\n \"8599\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.14999\n ],\n \"8600\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.14999\n ],\n \"8601\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.14999\n ],\n \"8636\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8637\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8640\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8641\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8656\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8657\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.70277\n ],\n \"8658\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8659\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.70277\n ],\n \"8660\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 1.14999\n ],\n \"8661\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.70277\n ],\n \"8704\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"8706\": [\n 0,\n 0.69444,\n 0.06389,\n 0,\n 0.62847\n ],\n \"8707\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"8709\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"8711\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.95833\n ],\n \"8712\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.76666\n ],\n \"8715\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.76666\n ],\n \"8722\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8723\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8725\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"8726\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"8727\": [\n -0.02778,\n 0.47222,\n 0,\n 0,\n 0.575\n ],\n \"8728\": [\n -0.02639,\n 0.47361,\n 0,\n 0,\n 0.575\n ],\n \"8729\": [\n -0.02639,\n 0.47361,\n 0,\n 0,\n 0.575\n ],\n \"8730\": [\n 0.18,\n 0.82,\n 0,\n 0,\n 0.95833\n ],\n \"8733\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.89444\n ],\n \"8734\": [\n 0,\n 0.44444,\n 0,\n 0,\n 1.14999\n ],\n \"8736\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.72222\n ],\n \"8739\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.31944\n ],\n \"8741\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.575\n ],\n \"8743\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8744\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8745\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8746\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8747\": [\n 0.19444,\n 0.69444,\n 0.12778,\n 0,\n 0.56875\n ],\n \"8764\": [\n -0.10889,\n 0.39111,\n 0,\n 0,\n 0.89444\n ],\n \"8768\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.31944\n ],\n \"8771\": [\n 0.00222,\n 0.50222,\n 0,\n 0,\n 0.89444\n ],\n \"8773\": [\n 0.027,\n 0.638,\n 0,\n 0,\n 0.894\n ],\n \"8776\": [\n 0.02444,\n 0.52444,\n 0,\n 0,\n 0.89444\n ],\n \"8781\": [\n 0.00222,\n 0.50222,\n 0,\n 0,\n 0.89444\n ],\n \"8801\": [\n 0.00222,\n 0.50222,\n 0,\n 0,\n 0.89444\n ],\n \"8804\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8805\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8810\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 1.14999\n ],\n \"8811\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 1.14999\n ],\n \"8826\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"8827\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"8834\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"8835\": [\n 0.08556,\n 0.58556,\n 0,\n 0,\n 0.89444\n ],\n \"8838\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8839\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8846\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8849\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8850\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"8851\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8852\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.76666\n ],\n \"8853\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8854\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8855\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8856\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8857\": [\n 0.13333,\n 0.63333,\n 0,\n 0,\n 0.89444\n ],\n \"8866\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70277\n ],\n \"8867\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70277\n ],\n \"8868\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"8869\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"8900\": [\n -0.02639,\n 0.47361,\n 0,\n 0,\n 0.575\n ],\n \"8901\": [\n -0.02639,\n 0.47361,\n 0,\n 0,\n 0.31944\n ],\n \"8902\": [\n -0.02778,\n 0.47222,\n 0,\n 0,\n 0.575\n ],\n \"8968\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.51111\n ],\n \"8969\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.51111\n ],\n \"8970\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.51111\n ],\n \"8971\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.51111\n ],\n \"8994\": [\n -0.13889,\n 0.36111,\n 0,\n 0,\n 1.14999\n ],\n \"8995\": [\n -0.13889,\n 0.36111,\n 0,\n 0,\n 1.14999\n ],\n \"9651\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.02222\n ],\n \"9657\": [\n -0.02778,\n 0.47222,\n 0,\n 0,\n 0.575\n ],\n \"9661\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.02222\n ],\n \"9667\": [\n -0.02778,\n 0.47222,\n 0,\n 0,\n 0.575\n ],\n \"9711\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.14999\n ],\n \"9824\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"9825\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"9826\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"9827\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.89444\n ],\n \"9837\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.44722\n ],\n \"9838\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.44722\n ],\n \"9839\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.44722\n ],\n \"10216\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44722\n ],\n \"10217\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44722\n ],\n \"10815\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.9\n ],\n \"10927\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"10928\": [\n 0.19667,\n 0.69667,\n 0,\n 0,\n 0.89444\n ],\n \"57376\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0\n ]\n },\n \"Main-BoldItalic\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0.11417,\n 0,\n 0.38611\n ],\n \"34\": [\n 0,\n 0.69444,\n 0.07939,\n 0,\n 0.62055\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0.06833,\n 0,\n 0.94444\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0.12861,\n 0,\n 0.94444\n ],\n \"38\": [\n 0,\n 0.69444,\n 0.08528,\n 0,\n 0.88555\n ],\n \"39\": [\n 0,\n 0.69444,\n 0.12945,\n 0,\n 0.35555\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0.15806,\n 0,\n 0.47333\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0.03306,\n 0,\n 0.47333\n ],\n \"42\": [\n 0,\n 0.75,\n 0.14333,\n 0,\n 0.59111\n ],\n \"43\": [\n 0.10333,\n 0.60333,\n 0.03306,\n 0,\n 0.88555\n ],\n \"44\": [\n 0.19444,\n 0.14722,\n 0,\n 0,\n 0.35555\n ],\n \"45\": [\n 0,\n 0.44444,\n 0.02611,\n 0,\n 0.41444\n ],\n \"46\": [\n 0,\n 0.14722,\n 0,\n 0,\n 0.35555\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0.15806,\n 0,\n 0.59111\n ],\n \"48\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"49\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"50\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"51\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"52\": [\n 0.19444,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"53\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"54\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"55\": [\n 0.19444,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"56\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"57\": [\n 0,\n 0.64444,\n 0.13167,\n 0,\n 0.59111\n ],\n \"58\": [\n 0,\n 0.44444,\n 0.06695,\n 0,\n 0.35555\n ],\n \"59\": [\n 0.19444,\n 0.44444,\n 0.06695,\n 0,\n 0.35555\n ],\n \"61\": [\n -0.10889,\n 0.39111,\n 0.06833,\n 0,\n 0.88555\n ],\n \"63\": [\n 0,\n 0.69444,\n 0.11472,\n 0,\n 0.59111\n ],\n \"64\": [\n 0,\n 0.69444,\n 0.09208,\n 0,\n 0.88555\n ],\n \"65\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.86555\n ],\n \"66\": [\n 0,\n 0.68611,\n 0.0992,\n 0,\n 0.81666\n ],\n \"67\": [\n 0,\n 0.68611,\n 0.14208,\n 0,\n 0.82666\n ],\n \"68\": [\n 0,\n 0.68611,\n 0.09062,\n 0,\n 0.87555\n ],\n \"69\": [\n 0,\n 0.68611,\n 0.11431,\n 0,\n 0.75666\n ],\n \"70\": [\n 0,\n 0.68611,\n 0.12903,\n 0,\n 0.72722\n ],\n \"71\": [\n 0,\n 0.68611,\n 0.07347,\n 0,\n 0.89527\n ],\n \"72\": [\n 0,\n 0.68611,\n 0.17208,\n 0,\n 0.8961\n ],\n \"73\": [\n 0,\n 0.68611,\n 0.15681,\n 0,\n 0.47166\n ],\n \"74\": [\n 0,\n 0.68611,\n 0.145,\n 0,\n 0.61055\n ],\n \"75\": [\n 0,\n 0.68611,\n 0.14208,\n 0,\n 0.89499\n ],\n \"76\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.69777\n ],\n \"77\": [\n 0,\n 0.68611,\n 0.17208,\n 0,\n 1.07277\n ],\n \"78\": [\n 0,\n 0.68611,\n 0.17208,\n 0,\n 0.8961\n ],\n \"79\": [\n 0,\n 0.68611,\n 0.09062,\n 0,\n 0.85499\n ],\n \"80\": [\n 0,\n 0.68611,\n 0.0992,\n 0,\n 0.78721\n ],\n \"81\": [\n 0.19444,\n 0.68611,\n 0.09062,\n 0,\n 0.85499\n ],\n \"82\": [\n 0,\n 0.68611,\n 0.02559,\n 0,\n 0.85944\n ],\n \"83\": [\n 0,\n 0.68611,\n 0.11264,\n 0,\n 0.64999\n ],\n \"84\": [\n 0,\n 0.68611,\n 0.12903,\n 0,\n 0.7961\n ],\n \"85\": [\n 0,\n 0.68611,\n 0.17208,\n 0,\n 0.88083\n ],\n \"86\": [\n 0,\n 0.68611,\n 0.18625,\n 0,\n 0.86555\n ],\n \"87\": [\n 0,\n 0.68611,\n 0.18625,\n 0,\n 1.15999\n ],\n \"88\": [\n 0,\n 0.68611,\n 0.15681,\n 0,\n 0.86555\n ],\n \"89\": [\n 0,\n 0.68611,\n 0.19803,\n 0,\n 0.86555\n ],\n \"90\": [\n 0,\n 0.68611,\n 0.14208,\n 0,\n 0.70888\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0.1875,\n 0,\n 0.35611\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0.09972,\n 0,\n 0.35611\n ],\n \"94\": [\n 0,\n 0.69444,\n 0.06709,\n 0,\n 0.59111\n ],\n \"95\": [\n 0.31,\n 0.13444,\n 0.09811,\n 0,\n 0.59111\n ],\n \"97\": [\n 0,\n 0.44444,\n 0.09426,\n 0,\n 0.59111\n ],\n \"98\": [\n 0,\n 0.69444,\n 0.07861,\n 0,\n 0.53222\n ],\n \"99\": [\n 0,\n 0.44444,\n 0.05222,\n 0,\n 0.53222\n ],\n \"100\": [\n 0,\n 0.69444,\n 0.10861,\n 0,\n 0.59111\n ],\n \"101\": [\n 0,\n 0.44444,\n 0.085,\n 0,\n 0.53222\n ],\n \"102\": [\n 0.19444,\n 0.69444,\n 0.21778,\n 0,\n 0.4\n ],\n \"103\": [\n 0.19444,\n 0.44444,\n 0.105,\n 0,\n 0.53222\n ],\n \"104\": [\n 0,\n 0.69444,\n 0.09426,\n 0,\n 0.59111\n ],\n \"105\": [\n 0,\n 0.69326,\n 0.11387,\n 0,\n 0.35555\n ],\n \"106\": [\n 0.19444,\n 0.69326,\n 0.1672,\n 0,\n 0.35555\n ],\n \"107\": [\n 0,\n 0.69444,\n 0.11111,\n 0,\n 0.53222\n ],\n \"108\": [\n 0,\n 0.69444,\n 0.10861,\n 0,\n 0.29666\n ],\n \"109\": [\n 0,\n 0.44444,\n 0.09426,\n 0,\n 0.94444\n ],\n \"110\": [\n 0,\n 0.44444,\n 0.09426,\n 0,\n 0.64999\n ],\n \"111\": [\n 0,\n 0.44444,\n 0.07861,\n 0,\n 0.59111\n ],\n \"112\": [\n 0.19444,\n 0.44444,\n 0.07861,\n 0,\n 0.59111\n ],\n \"113\": [\n 0.19444,\n 0.44444,\n 0.105,\n 0,\n 0.53222\n ],\n \"114\": [\n 0,\n 0.44444,\n 0.11111,\n 0,\n 0.50167\n ],\n \"115\": [\n 0,\n 0.44444,\n 0.08167,\n 0,\n 0.48694\n ],\n \"116\": [\n 0,\n 0.63492,\n 0.09639,\n 0,\n 0.385\n ],\n \"117\": [\n 0,\n 0.44444,\n 0.09426,\n 0,\n 0.62055\n ],\n \"118\": [\n 0,\n 0.44444,\n 0.11111,\n 0,\n 0.53222\n ],\n \"119\": [\n 0,\n 0.44444,\n 0.11111,\n 0,\n 0.76777\n ],\n \"120\": [\n 0,\n 0.44444,\n 0.12583,\n 0,\n 0.56055\n ],\n \"121\": [\n 0.19444,\n 0.44444,\n 0.105,\n 0,\n 0.56166\n ],\n \"122\": [\n 0,\n 0.44444,\n 0.13889,\n 0,\n 0.49055\n ],\n \"126\": [\n 0.35,\n 0.34444,\n 0.11472,\n 0,\n 0.59111\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"168\": [\n 0,\n 0.69444,\n 0.11473,\n 0,\n 0.59111\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.94888\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.53222\n ],\n \"198\": [\n 0,\n 0.68611,\n 0.11431,\n 0,\n 1.02277\n ],\n \"216\": [\n 0.04861,\n 0.73472,\n 0.09062,\n 0,\n 0.88555\n ],\n \"223\": [\n 0.19444,\n 0.69444,\n 0.09736,\n 0,\n 0.665\n ],\n \"230\": [\n 0,\n 0.44444,\n 0.085,\n 0,\n 0.82666\n ],\n \"248\": [\n 0.09722,\n 0.54167,\n 0.09458,\n 0,\n 0.59111\n ],\n \"305\": [\n 0,\n 0.44444,\n 0.09426,\n 0,\n 0.35555\n ],\n \"338\": [\n 0,\n 0.68611,\n 0.11431,\n 0,\n 1.14054\n ],\n \"339\": [\n 0,\n 0.44444,\n 0.085,\n 0,\n 0.82666\n ],\n \"567\": [\n 0.19444,\n 0.44444,\n 0.04611,\n 0,\n 0.385\n ],\n \"710\": [\n 0,\n 0.69444,\n 0.06709,\n 0,\n 0.59111\n ],\n \"711\": [\n 0,\n 0.63194,\n 0.08271,\n 0,\n 0.59111\n ],\n \"713\": [\n 0,\n 0.59444,\n 0.10444,\n 0,\n 0.59111\n ],\n \"714\": [\n 0,\n 0.69444,\n 0.08528,\n 0,\n 0.59111\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.59111\n ],\n \"728\": [\n 0,\n 0.69444,\n 0.10333,\n 0,\n 0.59111\n ],\n \"729\": [\n 0,\n 0.69444,\n 0.12945,\n 0,\n 0.35555\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.94888\n ],\n \"732\": [\n 0,\n 0.69444,\n 0.11472,\n 0,\n 0.59111\n ],\n \"733\": [\n 0,\n 0.69444,\n 0.11472,\n 0,\n 0.59111\n ],\n \"915\": [\n 0,\n 0.68611,\n 0.12903,\n 0,\n 0.69777\n ],\n \"916\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.94444\n ],\n \"920\": [\n 0,\n 0.68611,\n 0.09062,\n 0,\n 0.88555\n ],\n \"923\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.80666\n ],\n \"926\": [\n 0,\n 0.68611,\n 0.15092,\n 0,\n 0.76777\n ],\n \"928\": [\n 0,\n 0.68611,\n 0.17208,\n 0,\n 0.8961\n ],\n \"931\": [\n 0,\n 0.68611,\n 0.11431,\n 0,\n 0.82666\n ],\n \"933\": [\n 0,\n 0.68611,\n 0.10778,\n 0,\n 0.88555\n ],\n \"934\": [\n 0,\n 0.68611,\n 0.05632,\n 0,\n 0.82666\n ],\n \"936\": [\n 0,\n 0.68611,\n 0.10778,\n 0,\n 0.88555\n ],\n \"937\": [\n 0,\n 0.68611,\n 0.0992,\n 0,\n 0.82666\n ],\n \"8211\": [\n 0,\n 0.44444,\n 0.09811,\n 0,\n 0.59111\n ],\n \"8212\": [\n 0,\n 0.44444,\n 0.09811,\n 0,\n 1.18221\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0.12945,\n 0,\n 0.35555\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0.12945,\n 0,\n 0.35555\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0.16772,\n 0,\n 0.62055\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0.07939,\n 0,\n 0.62055\n ]\n },\n \"Main-Italic\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0.12417,\n 0,\n 0.30667\n ],\n \"34\": [\n 0,\n 0.69444,\n 0.06961,\n 0,\n 0.51444\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0.06616,\n 0,\n 0.81777\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0.13639,\n 0,\n 0.81777\n ],\n \"38\": [\n 0,\n 0.69444,\n 0.09694,\n 0,\n 0.76666\n ],\n \"39\": [\n 0,\n 0.69444,\n 0.12417,\n 0,\n 0.30667\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0.16194,\n 0,\n 0.40889\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0.03694,\n 0,\n 0.40889\n ],\n \"42\": [\n 0,\n 0.75,\n 0.14917,\n 0,\n 0.51111\n ],\n \"43\": [\n 0.05667,\n 0.56167,\n 0.03694,\n 0,\n 0.76666\n ],\n \"44\": [\n 0.19444,\n 0.10556,\n 0,\n 0,\n 0.30667\n ],\n \"45\": [\n 0,\n 0.43056,\n 0.02826,\n 0,\n 0.35778\n ],\n \"46\": [\n 0,\n 0.10556,\n 0,\n 0,\n 0.30667\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0.16194,\n 0,\n 0.51111\n ],\n \"48\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"49\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"50\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"51\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"52\": [\n 0.19444,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"53\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"54\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"55\": [\n 0.19444,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"56\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"57\": [\n 0,\n 0.64444,\n 0.13556,\n 0,\n 0.51111\n ],\n \"58\": [\n 0,\n 0.43056,\n 0.0582,\n 0,\n 0.30667\n ],\n \"59\": [\n 0.19444,\n 0.43056,\n 0.0582,\n 0,\n 0.30667\n ],\n \"61\": [\n -0.13313,\n 0.36687,\n 0.06616,\n 0,\n 0.76666\n ],\n \"63\": [\n 0,\n 0.69444,\n 0.1225,\n 0,\n 0.51111\n ],\n \"64\": [\n 0,\n 0.69444,\n 0.09597,\n 0,\n 0.76666\n ],\n \"65\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.74333\n ],\n \"66\": [\n 0,\n 0.68333,\n 0.10257,\n 0,\n 0.70389\n ],\n \"67\": [\n 0,\n 0.68333,\n 0.14528,\n 0,\n 0.71555\n ],\n \"68\": [\n 0,\n 0.68333,\n 0.09403,\n 0,\n 0.755\n ],\n \"69\": [\n 0,\n 0.68333,\n 0.12028,\n 0,\n 0.67833\n ],\n \"70\": [\n 0,\n 0.68333,\n 0.13305,\n 0,\n 0.65277\n ],\n \"71\": [\n 0,\n 0.68333,\n 0.08722,\n 0,\n 0.77361\n ],\n \"72\": [\n 0,\n 0.68333,\n 0.16389,\n 0,\n 0.74333\n ],\n \"73\": [\n 0,\n 0.68333,\n 0.15806,\n 0,\n 0.38555\n ],\n \"74\": [\n 0,\n 0.68333,\n 0.14028,\n 0,\n 0.525\n ],\n \"75\": [\n 0,\n 0.68333,\n 0.14528,\n 0,\n 0.76888\n ],\n \"76\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.62722\n ],\n \"77\": [\n 0,\n 0.68333,\n 0.16389,\n 0,\n 0.89666\n ],\n \"78\": [\n 0,\n 0.68333,\n 0.16389,\n 0,\n 0.74333\n ],\n \"79\": [\n 0,\n 0.68333,\n 0.09403,\n 0,\n 0.76666\n ],\n \"80\": [\n 0,\n 0.68333,\n 0.10257,\n 0,\n 0.67833\n ],\n \"81\": [\n 0.19444,\n 0.68333,\n 0.09403,\n 0,\n 0.76666\n ],\n \"82\": [\n 0,\n 0.68333,\n 0.03868,\n 0,\n 0.72944\n ],\n \"83\": [\n 0,\n 0.68333,\n 0.11972,\n 0,\n 0.56222\n ],\n \"84\": [\n 0,\n 0.68333,\n 0.13305,\n 0,\n 0.71555\n ],\n \"85\": [\n 0,\n 0.68333,\n 0.16389,\n 0,\n 0.74333\n ],\n \"86\": [\n 0,\n 0.68333,\n 0.18361,\n 0,\n 0.74333\n ],\n \"87\": [\n 0,\n 0.68333,\n 0.18361,\n 0,\n 0.99888\n ],\n \"88\": [\n 0,\n 0.68333,\n 0.15806,\n 0,\n 0.74333\n ],\n \"89\": [\n 0,\n 0.68333,\n 0.19383,\n 0,\n 0.74333\n ],\n \"90\": [\n 0,\n 0.68333,\n 0.14528,\n 0,\n 0.61333\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0.1875,\n 0,\n 0.30667\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0.10528,\n 0,\n 0.30667\n ],\n \"94\": [\n 0,\n 0.69444,\n 0.06646,\n 0,\n 0.51111\n ],\n \"95\": [\n 0.31,\n 0.12056,\n 0.09208,\n 0,\n 0.51111\n ],\n \"97\": [\n 0,\n 0.43056,\n 0.07671,\n 0,\n 0.51111\n ],\n \"98\": [\n 0,\n 0.69444,\n 0.06312,\n 0,\n 0.46\n ],\n \"99\": [\n 0,\n 0.43056,\n 0.05653,\n 0,\n 0.46\n ],\n \"100\": [\n 0,\n 0.69444,\n 0.10333,\n 0,\n 0.51111\n ],\n \"101\": [\n 0,\n 0.43056,\n 0.07514,\n 0,\n 0.46\n ],\n \"102\": [\n 0.19444,\n 0.69444,\n 0.21194,\n 0,\n 0.30667\n ],\n \"103\": [\n 0.19444,\n 0.43056,\n 0.08847,\n 0,\n 0.46\n ],\n \"104\": [\n 0,\n 0.69444,\n 0.07671,\n 0,\n 0.51111\n ],\n \"105\": [\n 0,\n 0.65536,\n 0.1019,\n 0,\n 0.30667\n ],\n \"106\": [\n 0.19444,\n 0.65536,\n 0.14467,\n 0,\n 0.30667\n ],\n \"107\": [\n 0,\n 0.69444,\n 0.10764,\n 0,\n 0.46\n ],\n \"108\": [\n 0,\n 0.69444,\n 0.10333,\n 0,\n 0.25555\n ],\n \"109\": [\n 0,\n 0.43056,\n 0.07671,\n 0,\n 0.81777\n ],\n \"110\": [\n 0,\n 0.43056,\n 0.07671,\n 0,\n 0.56222\n ],\n \"111\": [\n 0,\n 0.43056,\n 0.06312,\n 0,\n 0.51111\n ],\n \"112\": [\n 0.19444,\n 0.43056,\n 0.06312,\n 0,\n 0.51111\n ],\n \"113\": [\n 0.19444,\n 0.43056,\n 0.08847,\n 0,\n 0.46\n ],\n \"114\": [\n 0,\n 0.43056,\n 0.10764,\n 0,\n 0.42166\n ],\n \"115\": [\n 0,\n 0.43056,\n 0.08208,\n 0,\n 0.40889\n ],\n \"116\": [\n 0,\n 0.61508,\n 0.09486,\n 0,\n 0.33222\n ],\n \"117\": [\n 0,\n 0.43056,\n 0.07671,\n 0,\n 0.53666\n ],\n \"118\": [\n 0,\n 0.43056,\n 0.10764,\n 0,\n 0.46\n ],\n \"119\": [\n 0,\n 0.43056,\n 0.10764,\n 0,\n 0.66444\n ],\n \"120\": [\n 0,\n 0.43056,\n 0.12042,\n 0,\n 0.46389\n ],\n \"121\": [\n 0.19444,\n 0.43056,\n 0.08847,\n 0,\n 0.48555\n ],\n \"122\": [\n 0,\n 0.43056,\n 0.12292,\n 0,\n 0.40889\n ],\n \"126\": [\n 0.35,\n 0.31786,\n 0.11585,\n 0,\n 0.51111\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"168\": [\n 0,\n 0.66786,\n 0.10474,\n 0,\n 0.51111\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83129\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.46\n ],\n \"198\": [\n 0,\n 0.68333,\n 0.12028,\n 0,\n 0.88277\n ],\n \"216\": [\n 0.04861,\n 0.73194,\n 0.09403,\n 0,\n 0.76666\n ],\n \"223\": [\n 0.19444,\n 0.69444,\n 0.10514,\n 0,\n 0.53666\n ],\n \"230\": [\n 0,\n 0.43056,\n 0.07514,\n 0,\n 0.71555\n ],\n \"248\": [\n 0.09722,\n 0.52778,\n 0.09194,\n 0,\n 0.51111\n ],\n \"338\": [\n 0,\n 0.68333,\n 0.12028,\n 0,\n 0.98499\n ],\n \"339\": [\n 0,\n 0.43056,\n 0.07514,\n 0,\n 0.71555\n ],\n \"710\": [\n 0,\n 0.69444,\n 0.06646,\n 0,\n 0.51111\n ],\n \"711\": [\n 0,\n 0.62847,\n 0.08295,\n 0,\n 0.51111\n ],\n \"713\": [\n 0,\n 0.56167,\n 0.10333,\n 0,\n 0.51111\n ],\n \"714\": [\n 0,\n 0.69444,\n 0.09694,\n 0,\n 0.51111\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51111\n ],\n \"728\": [\n 0,\n 0.69444,\n 0.10806,\n 0,\n 0.51111\n ],\n \"729\": [\n 0,\n 0.66786,\n 0.11752,\n 0,\n 0.30667\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83129\n ],\n \"732\": [\n 0,\n 0.66786,\n 0.11585,\n 0,\n 0.51111\n ],\n \"733\": [\n 0,\n 0.69444,\n 0.1225,\n 0,\n 0.51111\n ],\n \"915\": [\n 0,\n 0.68333,\n 0.13305,\n 0,\n 0.62722\n ],\n \"916\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.81777\n ],\n \"920\": [\n 0,\n 0.68333,\n 0.09403,\n 0,\n 0.76666\n ],\n \"923\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.69222\n ],\n \"926\": [\n 0,\n 0.68333,\n 0.15294,\n 0,\n 0.66444\n ],\n \"928\": [\n 0,\n 0.68333,\n 0.16389,\n 0,\n 0.74333\n ],\n \"931\": [\n 0,\n 0.68333,\n 0.12028,\n 0,\n 0.71555\n ],\n \"933\": [\n 0,\n 0.68333,\n 0.11111,\n 0,\n 0.76666\n ],\n \"934\": [\n 0,\n 0.68333,\n 0.05986,\n 0,\n 0.71555\n ],\n \"936\": [\n 0,\n 0.68333,\n 0.11111,\n 0,\n 0.76666\n ],\n \"937\": [\n 0,\n 0.68333,\n 0.10257,\n 0,\n 0.71555\n ],\n \"8211\": [\n 0,\n 0.43056,\n 0.09208,\n 0,\n 0.51111\n ],\n \"8212\": [\n 0,\n 0.43056,\n 0.09208,\n 0,\n 1.02222\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0.12417,\n 0,\n 0.30667\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0.12417,\n 0,\n 0.30667\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0.1685,\n 0,\n 0.51444\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0.06961,\n 0,\n 0.51444\n ],\n \"8463\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.54028\n ]\n },\n \"Main-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"34\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.83334\n ],\n \"36\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"38\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"39\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"42\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"43\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"44\": [\n 0.19444,\n 0.10556,\n 0,\n 0,\n 0.27778\n ],\n \"45\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.33333\n ],\n \"46\": [\n 0,\n 0.10556,\n 0,\n 0,\n 0.27778\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"48\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"49\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"50\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"51\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"52\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"53\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"54\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"55\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"56\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"57\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"58\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.27778\n ],\n \"59\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.27778\n ],\n \"60\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"61\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 0.77778\n ],\n \"62\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"63\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.47222\n ],\n \"64\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"65\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"66\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.70834\n ],\n \"67\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.72222\n ],\n \"68\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.76389\n ],\n \"69\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.68056\n ],\n \"70\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.65278\n ],\n \"71\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.78472\n ],\n \"72\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"73\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.36111\n ],\n \"74\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.51389\n ],\n \"75\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"76\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.625\n ],\n \"77\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.91667\n ],\n \"78\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"79\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"80\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.68056\n ],\n \"81\": [\n 0.19444,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"82\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.73611\n ],\n \"83\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.55556\n ],\n \"84\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.72222\n ],\n \"85\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"86\": [\n 0,\n 0.68333,\n 0.01389,\n 0,\n 0.75\n ],\n \"87\": [\n 0,\n 0.68333,\n 0.01389,\n 0,\n 1.02778\n ],\n \"88\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"89\": [\n 0,\n 0.68333,\n 0.025,\n 0,\n 0.75\n ],\n \"90\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.61111\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.27778\n ],\n \"92\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.27778\n ],\n \"94\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"95\": [\n 0.31,\n 0.12056,\n 0.02778,\n 0,\n 0.5\n ],\n \"97\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"99\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.44445\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"101\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.44445\n ],\n \"102\": [\n 0,\n 0.69444,\n 0.07778,\n 0,\n 0.30556\n ],\n \"103\": [\n 0.19444,\n 0.43056,\n 0.01389,\n 0,\n 0.5\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"105\": [\n 0,\n 0.66786,\n 0,\n 0,\n 0.27778\n ],\n \"106\": [\n 0.19444,\n 0.66786,\n 0,\n 0,\n 0.30556\n ],\n \"107\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.52778\n ],\n \"108\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"109\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.83334\n ],\n \"110\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.55556\n ],\n \"111\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"112\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.55556\n ],\n \"113\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.52778\n ],\n \"114\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.39167\n ],\n \"115\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.39445\n ],\n \"116\": [\n 0,\n 0.61508,\n 0,\n 0,\n 0.38889\n ],\n \"117\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.55556\n ],\n \"118\": [\n 0,\n 0.43056,\n 0.01389,\n 0,\n 0.52778\n ],\n \"119\": [\n 0,\n 0.43056,\n 0.01389,\n 0,\n 0.72222\n ],\n \"120\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.52778\n ],\n \"121\": [\n 0.19444,\n 0.43056,\n 0.01389,\n 0,\n 0.52778\n ],\n \"122\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.44445\n ],\n \"123\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"124\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.27778\n ],\n \"125\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"126\": [\n 0.35,\n 0.31786,\n 0,\n 0,\n 0.5\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"163\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.76909\n ],\n \"167\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.44445\n ],\n \"168\": [\n 0,\n 0.66786,\n 0,\n 0,\n 0.5\n ],\n \"172\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.66667\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.75\n ],\n \"177\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"182\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.44445\n ],\n \"198\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.90278\n ],\n \"215\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"216\": [\n 0.04861,\n 0.73194,\n 0,\n 0,\n 0.77778\n ],\n \"223\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"230\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.72222\n ],\n \"247\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"248\": [\n 0.09722,\n 0.52778,\n 0,\n 0,\n 0.5\n ],\n \"305\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.27778\n ],\n \"338\": [\n 0,\n 0.68333,\n 0,\n 0,\n 1.01389\n ],\n \"339\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.77778\n ],\n \"567\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.30556\n ],\n \"710\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"711\": [\n 0,\n 0.62847,\n 0,\n 0,\n 0.5\n ],\n \"713\": [\n 0,\n 0.56778,\n 0,\n 0,\n 0.5\n ],\n \"714\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"728\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"729\": [\n 0,\n 0.66786,\n 0,\n 0,\n 0.27778\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.75\n ],\n \"732\": [\n 0,\n 0.66786,\n 0,\n 0,\n 0.5\n ],\n \"733\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"915\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.625\n ],\n \"916\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.83334\n ],\n \"920\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"923\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.69445\n ],\n \"926\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.66667\n ],\n \"928\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"931\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.72222\n ],\n \"933\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"934\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.72222\n ],\n \"936\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.77778\n ],\n \"937\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.72222\n ],\n \"8211\": [\n 0,\n 0.43056,\n 0.02778,\n 0,\n 0.5\n ],\n \"8212\": [\n 0,\n 0.43056,\n 0.02778,\n 0,\n 1.0\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"8224\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.44445\n ],\n \"8225\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.44445\n ],\n \"8230\": [\n 0,\n 0.123,\n 0,\n 0,\n 1.172\n ],\n \"8242\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.275\n ],\n \"8407\": [\n 0,\n 0.71444,\n 0.15382,\n 0,\n 0.5\n ],\n \"8463\": [\n 0,\n 0.68889,\n 0,\n 0,\n 0.54028\n ],\n \"8465\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72222\n ],\n \"8467\": [\n 0,\n 0.69444,\n 0,\n 0.11111,\n 0.41667\n ],\n \"8472\": [\n 0.19444,\n 0.43056,\n 0,\n 0.11111,\n 0.63646\n ],\n \"8476\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72222\n ],\n \"8501\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"8592\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8593\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"8594\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8595\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"8596\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8597\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"8598\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.0\n ],\n \"8599\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.0\n ],\n \"8600\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.0\n ],\n \"8601\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.0\n ],\n \"8614\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.0\n ],\n \"8617\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.126\n ],\n \"8618\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.126\n ],\n \"8636\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8637\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8640\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8641\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8652\": [\n 0.011,\n 0.671,\n 0,\n 0,\n 1.0\n ],\n \"8656\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8657\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"8658\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8659\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"8660\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 1.0\n ],\n \"8661\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.61111\n ],\n \"8704\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"8706\": [\n 0,\n 0.69444,\n 0.05556,\n 0.08334,\n 0.5309\n ],\n \"8707\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"8709\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"8711\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.83334\n ],\n \"8712\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.66667\n ],\n \"8715\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.66667\n ],\n \"8722\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8723\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8725\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"8726\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"8727\": [\n -0.03472,\n 0.46528,\n 0,\n 0,\n 0.5\n ],\n \"8728\": [\n -0.05555,\n 0.44445,\n 0,\n 0,\n 0.5\n ],\n \"8729\": [\n -0.05555,\n 0.44445,\n 0,\n 0,\n 0.5\n ],\n \"8730\": [\n 0.2,\n 0.8,\n 0,\n 0,\n 0.83334\n ],\n \"8733\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.77778\n ],\n \"8734\": [\n 0,\n 0.43056,\n 0,\n 0,\n 1.0\n ],\n \"8736\": [\n 0,\n 0.69224,\n 0,\n 0,\n 0.72222\n ],\n \"8739\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.27778\n ],\n \"8741\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"8743\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8744\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8745\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8746\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8747\": [\n 0.19444,\n 0.69444,\n 0.11111,\n 0,\n 0.41667\n ],\n \"8764\": [\n -0.13313,\n 0.36687,\n 0,\n 0,\n 0.77778\n ],\n \"8768\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"8771\": [\n -0.03625,\n 0.46375,\n 0,\n 0,\n 0.77778\n ],\n \"8773\": [\n -0.022,\n 0.589,\n 0,\n 0,\n 0.778\n ],\n \"8776\": [\n -0.01688,\n 0.48312,\n 0,\n 0,\n 0.77778\n ],\n \"8781\": [\n -0.03625,\n 0.46375,\n 0,\n 0,\n 0.77778\n ],\n \"8784\": [\n -0.133,\n 0.673,\n 0,\n 0,\n 0.778\n ],\n \"8801\": [\n -0.03625,\n 0.46375,\n 0,\n 0,\n 0.77778\n ],\n \"8804\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8805\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8810\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 1.0\n ],\n \"8811\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 1.0\n ],\n \"8826\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8827\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8834\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8835\": [\n 0.0391,\n 0.5391,\n 0,\n 0,\n 0.77778\n ],\n \"8838\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8839\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8846\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8849\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8850\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"8851\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8852\": [\n 0,\n 0.55556,\n 0,\n 0,\n 0.66667\n ],\n \"8853\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8854\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8855\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8856\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8857\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"8866\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"8867\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"8868\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"8869\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"8872\": [\n 0.249,\n 0.75,\n 0,\n 0,\n 0.867\n ],\n \"8900\": [\n -0.05555,\n 0.44445,\n 0,\n 0,\n 0.5\n ],\n \"8901\": [\n -0.05555,\n 0.44445,\n 0,\n 0,\n 0.27778\n ],\n \"8902\": [\n -0.03472,\n 0.46528,\n 0,\n 0,\n 0.5\n ],\n \"8904\": [\n 0.005,\n 0.505,\n 0,\n 0,\n 0.9\n ],\n \"8942\": [\n 0.03,\n 0.903,\n 0,\n 0,\n 0.278\n ],\n \"8943\": [\n -0.19,\n 0.313,\n 0,\n 0,\n 1.172\n ],\n \"8945\": [\n -0.1,\n 0.823,\n 0,\n 0,\n 1.282\n ],\n \"8968\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44445\n ],\n \"8969\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44445\n ],\n \"8970\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44445\n ],\n \"8971\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.44445\n ],\n \"8994\": [\n -0.14236,\n 0.35764,\n 0,\n 0,\n 1.0\n ],\n \"8995\": [\n -0.14236,\n 0.35764,\n 0,\n 0,\n 1.0\n ],\n \"9136\": [\n 0.244,\n 0.744,\n 0,\n 0,\n 0.412\n ],\n \"9137\": [\n 0.244,\n 0.745,\n 0,\n 0,\n 0.412\n ],\n \"9651\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.88889\n ],\n \"9657\": [\n -0.03472,\n 0.46528,\n 0,\n 0,\n 0.5\n ],\n \"9661\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.88889\n ],\n \"9667\": [\n -0.03472,\n 0.46528,\n 0,\n 0,\n 0.5\n ],\n \"9711\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 1.0\n ],\n \"9824\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"9825\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"9826\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"9827\": [\n 0.12963,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"9837\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"9838\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.38889\n ],\n \"9839\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.38889\n ],\n \"10216\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"10217\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"10222\": [\n 0.244,\n 0.744,\n 0,\n 0,\n 0.412\n ],\n \"10223\": [\n 0.244,\n 0.745,\n 0,\n 0,\n 0.412\n ],\n \"10229\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.609\n ],\n \"10230\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.638\n ],\n \"10231\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.859\n ],\n \"10232\": [\n 0.024,\n 0.525,\n 0,\n 0,\n 1.609\n ],\n \"10233\": [\n 0.024,\n 0.525,\n 0,\n 0,\n 1.638\n ],\n \"10234\": [\n 0.024,\n 0.525,\n 0,\n 0,\n 1.858\n ],\n \"10236\": [\n 0.011,\n 0.511,\n 0,\n 0,\n 1.638\n ],\n \"10815\": [\n 0,\n 0.68333,\n 0,\n 0,\n 0.75\n ],\n \"10927\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"10928\": [\n 0.13597,\n 0.63597,\n 0,\n 0,\n 0.77778\n ],\n \"57376\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0\n ]\n },\n \"Math-BoldItalic\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"48\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"49\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"50\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"51\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"52\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"53\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"54\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"55\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"56\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.575\n ],\n \"57\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.575\n ],\n \"65\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.86944\n ],\n \"66\": [\n 0,\n 0.68611,\n 0.04835,\n 0,\n 0.8664\n ],\n \"67\": [\n 0,\n 0.68611,\n 0.06979,\n 0,\n 0.81694\n ],\n \"68\": [\n 0,\n 0.68611,\n 0.03194,\n 0,\n 0.93812\n ],\n \"69\": [\n 0,\n 0.68611,\n 0.05451,\n 0,\n 0.81007\n ],\n \"70\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 0.68889\n ],\n \"71\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.88673\n ],\n \"72\": [\n 0,\n 0.68611,\n 0.08229,\n 0,\n 0.98229\n ],\n \"73\": [\n 0,\n 0.68611,\n 0.07778,\n 0,\n 0.51111\n ],\n \"74\": [\n 0,\n 0.68611,\n 0.10069,\n 0,\n 0.63125\n ],\n \"75\": [\n 0,\n 0.68611,\n 0.06979,\n 0,\n 0.97118\n ],\n \"76\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.75555\n ],\n \"77\": [\n 0,\n 0.68611,\n 0.11424,\n 0,\n 1.14201\n ],\n \"78\": [\n 0,\n 0.68611,\n 0.11424,\n 0,\n 0.95034\n ],\n \"79\": [\n 0,\n 0.68611,\n 0.03194,\n 0,\n 0.83666\n ],\n \"80\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 0.72309\n ],\n \"81\": [\n 0.19444,\n 0.68611,\n 0,\n 0,\n 0.86861\n ],\n \"82\": [\n 0,\n 0.68611,\n 0.00421,\n 0,\n 0.87235\n ],\n \"83\": [\n 0,\n 0.68611,\n 0.05382,\n 0,\n 0.69271\n ],\n \"84\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 0.63663\n ],\n \"85\": [\n 0,\n 0.68611,\n 0.11424,\n 0,\n 0.80027\n ],\n \"86\": [\n 0,\n 0.68611,\n 0.25555,\n 0,\n 0.67778\n ],\n \"87\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 1.09305\n ],\n \"88\": [\n 0,\n 0.68611,\n 0.07778,\n 0,\n 0.94722\n ],\n \"89\": [\n 0,\n 0.68611,\n 0.25555,\n 0,\n 0.67458\n ],\n \"90\": [\n 0,\n 0.68611,\n 0.06979,\n 0,\n 0.77257\n ],\n \"97\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.63287\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.52083\n ],\n \"99\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.51342\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.60972\n ],\n \"101\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.55361\n ],\n \"102\": [\n 0.19444,\n 0.69444,\n 0.11042,\n 0,\n 0.56806\n ],\n \"103\": [\n 0.19444,\n 0.44444,\n 0.03704,\n 0,\n 0.5449\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66759\n ],\n \"105\": [\n 0,\n 0.69326,\n 0,\n 0,\n 0.4048\n ],\n \"106\": [\n 0.19444,\n 0.69326,\n 0.0622,\n 0,\n 0.47083\n ],\n \"107\": [\n 0,\n 0.69444,\n 0.01852,\n 0,\n 0.6037\n ],\n \"108\": [\n 0,\n 0.69444,\n 0.0088,\n 0,\n 0.34815\n ],\n \"109\": [\n 0,\n 0.44444,\n 0,\n 0,\n 1.0324\n ],\n \"110\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.71296\n ],\n \"111\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.58472\n ],\n \"112\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.60092\n ],\n \"113\": [\n 0.19444,\n 0.44444,\n 0.03704,\n 0,\n 0.54213\n ],\n \"114\": [\n 0,\n 0.44444,\n 0.03194,\n 0,\n 0.5287\n ],\n \"115\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.53125\n ],\n \"116\": [\n 0,\n 0.63492,\n 0,\n 0,\n 0.41528\n ],\n \"117\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.68102\n ],\n \"118\": [\n 0,\n 0.44444,\n 0.03704,\n 0,\n 0.56666\n ],\n \"119\": [\n 0,\n 0.44444,\n 0.02778,\n 0,\n 0.83148\n ],\n \"120\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.65903\n ],\n \"121\": [\n 0.19444,\n 0.44444,\n 0.03704,\n 0,\n 0.59028\n ],\n \"122\": [\n 0,\n 0.44444,\n 0.04213,\n 0,\n 0.55509\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"915\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 0.65694\n ],\n \"916\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.95833\n ],\n \"920\": [\n 0,\n 0.68611,\n 0.03194,\n 0,\n 0.86722\n ],\n \"923\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.80555\n ],\n \"926\": [\n 0,\n 0.68611,\n 0.07458,\n 0,\n 0.84125\n ],\n \"928\": [\n 0,\n 0.68611,\n 0.08229,\n 0,\n 0.98229\n ],\n \"931\": [\n 0,\n 0.68611,\n 0.05451,\n 0,\n 0.88507\n ],\n \"933\": [\n 0,\n 0.68611,\n 0.15972,\n 0,\n 0.67083\n ],\n \"934\": [\n 0,\n 0.68611,\n 0,\n 0,\n 0.76666\n ],\n \"936\": [\n 0,\n 0.68611,\n 0.11653,\n 0,\n 0.71402\n ],\n \"937\": [\n 0,\n 0.68611,\n 0.04835,\n 0,\n 0.8789\n ],\n \"945\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.76064\n ],\n \"946\": [\n 0.19444,\n 0.69444,\n 0.03403,\n 0,\n 0.65972\n ],\n \"947\": [\n 0.19444,\n 0.44444,\n 0.06389,\n 0,\n 0.59003\n ],\n \"948\": [\n 0,\n 0.69444,\n 0.03819,\n 0,\n 0.52222\n ],\n \"949\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.52882\n ],\n \"950\": [\n 0.19444,\n 0.69444,\n 0.06215,\n 0,\n 0.50833\n ],\n \"951\": [\n 0.19444,\n 0.44444,\n 0.03704,\n 0,\n 0.6\n ],\n \"952\": [\n 0,\n 0.69444,\n 0.03194,\n 0,\n 0.5618\n ],\n \"953\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.41204\n ],\n \"954\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.66759\n ],\n \"955\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.67083\n ],\n \"956\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.70787\n ],\n \"957\": [\n 0,\n 0.44444,\n 0.06898,\n 0,\n 0.57685\n ],\n \"958\": [\n 0.19444,\n 0.69444,\n 0.03021,\n 0,\n 0.50833\n ],\n \"959\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.58472\n ],\n \"960\": [\n 0,\n 0.44444,\n 0.03704,\n 0,\n 0.68241\n ],\n \"961\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.6118\n ],\n \"962\": [\n 0.09722,\n 0.44444,\n 0.07917,\n 0,\n 0.42361\n ],\n \"963\": [\n 0,\n 0.44444,\n 0.03704,\n 0,\n 0.68588\n ],\n \"964\": [\n 0,\n 0.44444,\n 0.13472,\n 0,\n 0.52083\n ],\n \"965\": [\n 0,\n 0.44444,\n 0.03704,\n 0,\n 0.63055\n ],\n \"966\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.74722\n ],\n \"967\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.71805\n ],\n \"968\": [\n 0.19444,\n 0.69444,\n 0.03704,\n 0,\n 0.75833\n ],\n \"969\": [\n 0,\n 0.44444,\n 0.03704,\n 0,\n 0.71782\n ],\n \"977\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.69155\n ],\n \"981\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.7125\n ],\n \"982\": [\n 0,\n 0.44444,\n 0.03194,\n 0,\n 0.975\n ],\n \"1009\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.6118\n ],\n \"1013\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.48333\n ],\n \"57649\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.39352\n ],\n \"57911\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.43889\n ]\n },\n \"Math-Italic\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"48\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"49\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"50\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"51\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"52\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"53\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"54\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"55\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"56\": [\n 0,\n 0.64444,\n 0,\n 0,\n 0.5\n ],\n \"57\": [\n 0.19444,\n 0.43056,\n 0,\n 0,\n 0.5\n ],\n \"65\": [\n 0,\n 0.68333,\n 0,\n 0.13889,\n 0.75\n ],\n \"66\": [\n 0,\n 0.68333,\n 0.05017,\n 0.08334,\n 0.75851\n ],\n \"67\": [\n 0,\n 0.68333,\n 0.07153,\n 0.08334,\n 0.71472\n ],\n \"68\": [\n 0,\n 0.68333,\n 0.02778,\n 0.05556,\n 0.82792\n ],\n \"69\": [\n 0,\n 0.68333,\n 0.05764,\n 0.08334,\n 0.7382\n ],\n \"70\": [\n 0,\n 0.68333,\n 0.13889,\n 0.08334,\n 0.64306\n ],\n \"71\": [\n 0,\n 0.68333,\n 0,\n 0.08334,\n 0.78625\n ],\n \"72\": [\n 0,\n 0.68333,\n 0.08125,\n 0.05556,\n 0.83125\n ],\n \"73\": [\n 0,\n 0.68333,\n 0.07847,\n 0.11111,\n 0.43958\n ],\n \"74\": [\n 0,\n 0.68333,\n 0.09618,\n 0.16667,\n 0.55451\n ],\n \"75\": [\n 0,\n 0.68333,\n 0.07153,\n 0.05556,\n 0.84931\n ],\n \"76\": [\n 0,\n 0.68333,\n 0,\n 0.02778,\n 0.68056\n ],\n \"77\": [\n 0,\n 0.68333,\n 0.10903,\n 0.08334,\n 0.97014\n ],\n \"78\": [\n 0,\n 0.68333,\n 0.10903,\n 0.08334,\n 0.80347\n ],\n \"79\": [\n 0,\n 0.68333,\n 0.02778,\n 0.08334,\n 0.76278\n ],\n \"80\": [\n 0,\n 0.68333,\n 0.13889,\n 0.08334,\n 0.64201\n ],\n \"81\": [\n 0.19444,\n 0.68333,\n 0,\n 0.08334,\n 0.79056\n ],\n \"82\": [\n 0,\n 0.68333,\n 0.00773,\n 0.08334,\n 0.75929\n ],\n \"83\": [\n 0,\n 0.68333,\n 0.05764,\n 0.08334,\n 0.6132\n ],\n \"84\": [\n 0,\n 0.68333,\n 0.13889,\n 0.08334,\n 0.58438\n ],\n \"85\": [\n 0,\n 0.68333,\n 0.10903,\n 0.02778,\n 0.68278\n ],\n \"86\": [\n 0,\n 0.68333,\n 0.22222,\n 0,\n 0.58333\n ],\n \"87\": [\n 0,\n 0.68333,\n 0.13889,\n 0,\n 0.94445\n ],\n \"88\": [\n 0,\n 0.68333,\n 0.07847,\n 0.08334,\n 0.82847\n ],\n \"89\": [\n 0,\n 0.68333,\n 0.22222,\n 0,\n 0.58056\n ],\n \"90\": [\n 0,\n 0.68333,\n 0.07153,\n 0.08334,\n 0.68264\n ],\n \"97\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.52859\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.42917\n ],\n \"99\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.43276\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0.16667,\n 0.52049\n ],\n \"101\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.46563\n ],\n \"102\": [\n 0.19444,\n 0.69444,\n 0.10764,\n 0.16667,\n 0.48959\n ],\n \"103\": [\n 0.19444,\n 0.43056,\n 0.03588,\n 0.02778,\n 0.47697\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.57616\n ],\n \"105\": [\n 0,\n 0.65952,\n 0,\n 0,\n 0.34451\n ],\n \"106\": [\n 0.19444,\n 0.65952,\n 0.05724,\n 0,\n 0.41181\n ],\n \"107\": [\n 0,\n 0.69444,\n 0.03148,\n 0,\n 0.5206\n ],\n \"108\": [\n 0,\n 0.69444,\n 0.01968,\n 0.08334,\n 0.29838\n ],\n \"109\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.87801\n ],\n \"110\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.60023\n ],\n \"111\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.48472\n ],\n \"112\": [\n 0.19444,\n 0.43056,\n 0,\n 0.08334,\n 0.50313\n ],\n \"113\": [\n 0.19444,\n 0.43056,\n 0.03588,\n 0.08334,\n 0.44641\n ],\n \"114\": [\n 0,\n 0.43056,\n 0.02778,\n 0.05556,\n 0.45116\n ],\n \"115\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.46875\n ],\n \"116\": [\n 0,\n 0.61508,\n 0,\n 0.08334,\n 0.36111\n ],\n \"117\": [\n 0,\n 0.43056,\n 0,\n 0.02778,\n 0.57246\n ],\n \"118\": [\n 0,\n 0.43056,\n 0.03588,\n 0.02778,\n 0.48472\n ],\n \"119\": [\n 0,\n 0.43056,\n 0.02691,\n 0.08334,\n 0.71592\n ],\n \"120\": [\n 0,\n 0.43056,\n 0,\n 0.02778,\n 0.57153\n ],\n \"121\": [\n 0.19444,\n 0.43056,\n 0.03588,\n 0.05556,\n 0.49028\n ],\n \"122\": [\n 0,\n 0.43056,\n 0.04398,\n 0.05556,\n 0.46505\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"915\": [\n 0,\n 0.68333,\n 0.13889,\n 0.08334,\n 0.61528\n ],\n \"916\": [\n 0,\n 0.68333,\n 0,\n 0.16667,\n 0.83334\n ],\n \"920\": [\n 0,\n 0.68333,\n 0.02778,\n 0.08334,\n 0.76278\n ],\n \"923\": [\n 0,\n 0.68333,\n 0,\n 0.16667,\n 0.69445\n ],\n \"926\": [\n 0,\n 0.68333,\n 0.07569,\n 0.08334,\n 0.74236\n ],\n \"928\": [\n 0,\n 0.68333,\n 0.08125,\n 0.05556,\n 0.83125\n ],\n \"931\": [\n 0,\n 0.68333,\n 0.05764,\n 0.08334,\n 0.77986\n ],\n \"933\": [\n 0,\n 0.68333,\n 0.13889,\n 0.05556,\n 0.58333\n ],\n \"934\": [\n 0,\n 0.68333,\n 0,\n 0.08334,\n 0.66667\n ],\n \"936\": [\n 0,\n 0.68333,\n 0.11,\n 0.05556,\n 0.61222\n ],\n \"937\": [\n 0,\n 0.68333,\n 0.05017,\n 0.08334,\n 0.7724\n ],\n \"945\": [\n 0,\n 0.43056,\n 0.0037,\n 0.02778,\n 0.6397\n ],\n \"946\": [\n 0.19444,\n 0.69444,\n 0.05278,\n 0.08334,\n 0.56563\n ],\n \"947\": [\n 0.19444,\n 0.43056,\n 0.05556,\n 0,\n 0.51773\n ],\n \"948\": [\n 0,\n 0.69444,\n 0.03785,\n 0.05556,\n 0.44444\n ],\n \"949\": [\n 0,\n 0.43056,\n 0,\n 0.08334,\n 0.46632\n ],\n \"950\": [\n 0.19444,\n 0.69444,\n 0.07378,\n 0.08334,\n 0.4375\n ],\n \"951\": [\n 0.19444,\n 0.43056,\n 0.03588,\n 0.05556,\n 0.49653\n ],\n \"952\": [\n 0,\n 0.69444,\n 0.02778,\n 0.08334,\n 0.46944\n ],\n \"953\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.35394\n ],\n \"954\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.57616\n ],\n \"955\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.58334\n ],\n \"956\": [\n 0.19444,\n 0.43056,\n 0,\n 0.02778,\n 0.60255\n ],\n \"957\": [\n 0,\n 0.43056,\n 0.06366,\n 0.02778,\n 0.49398\n ],\n \"958\": [\n 0.19444,\n 0.69444,\n 0.04601,\n 0.11111,\n 0.4375\n ],\n \"959\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.48472\n ],\n \"960\": [\n 0,\n 0.43056,\n 0.03588,\n 0,\n 0.57003\n ],\n \"961\": [\n 0.19444,\n 0.43056,\n 0,\n 0.08334,\n 0.51702\n ],\n \"962\": [\n 0.09722,\n 0.43056,\n 0.07986,\n 0.08334,\n 0.36285\n ],\n \"963\": [\n 0,\n 0.43056,\n 0.03588,\n 0,\n 0.57141\n ],\n \"964\": [\n 0,\n 0.43056,\n 0.1132,\n 0.02778,\n 0.43715\n ],\n \"965\": [\n 0,\n 0.43056,\n 0.03588,\n 0.02778,\n 0.54028\n ],\n \"966\": [\n 0.19444,\n 0.43056,\n 0,\n 0.08334,\n 0.65417\n ],\n \"967\": [\n 0.19444,\n 0.43056,\n 0,\n 0.05556,\n 0.62569\n ],\n \"968\": [\n 0.19444,\n 0.69444,\n 0.03588,\n 0.11111,\n 0.65139\n ],\n \"969\": [\n 0,\n 0.43056,\n 0.03588,\n 0,\n 0.62245\n ],\n \"977\": [\n 0,\n 0.69444,\n 0,\n 0.08334,\n 0.59144\n ],\n \"981\": [\n 0.19444,\n 0.69444,\n 0,\n 0.08334,\n 0.59583\n ],\n \"982\": [\n 0,\n 0.43056,\n 0.02778,\n 0,\n 0.82813\n ],\n \"1009\": [\n 0.19444,\n 0.43056,\n 0,\n 0.08334,\n 0.51702\n ],\n \"1013\": [\n 0,\n 0.43056,\n 0,\n 0.05556,\n 0.4059\n ],\n \"57649\": [\n 0,\n 0.43056,\n 0,\n 0.02778,\n 0.32246\n ],\n \"57911\": [\n 0.19444,\n 0.43056,\n 0,\n 0.08334,\n 0.38403\n ]\n },\n \"SansSerif-Bold\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.36667\n ],\n \"34\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55834\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.91667\n ],\n \"36\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.55\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 1.02912\n ],\n \"38\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83056\n ],\n \"39\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.30556\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.42778\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.42778\n ],\n \"42\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.55\n ],\n \"43\": [\n 0.11667,\n 0.61667,\n 0,\n 0,\n 0.85556\n ],\n \"44\": [\n 0.10556,\n 0.13056,\n 0,\n 0,\n 0.30556\n ],\n \"45\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.36667\n ],\n \"46\": [\n 0,\n 0.13056,\n 0,\n 0,\n 0.30556\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.55\n ],\n \"48\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"49\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"50\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"51\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"52\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"53\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"54\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"55\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"56\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"57\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"58\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.30556\n ],\n \"59\": [\n 0.10556,\n 0.45833,\n 0,\n 0,\n 0.30556\n ],\n \"61\": [\n -0.09375,\n 0.40625,\n 0,\n 0,\n 0.85556\n ],\n \"63\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51945\n ],\n \"64\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"65\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"66\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"67\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70278\n ],\n \"68\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"69\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.64167\n ],\n \"70\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"71\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"72\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"73\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.33056\n ],\n \"74\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51945\n ],\n \"75\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.76389\n ],\n \"76\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.58056\n ],\n \"77\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.97778\n ],\n \"78\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"79\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"80\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70278\n ],\n \"81\": [\n 0.10556,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"82\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70278\n ],\n \"83\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"84\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"85\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.76389\n ],\n \"86\": [\n 0,\n 0.69444,\n 0.01528,\n 0,\n 0.73334\n ],\n \"87\": [\n 0,\n 0.69444,\n 0.01528,\n 0,\n 1.03889\n ],\n \"88\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"89\": [\n 0,\n 0.69444,\n 0.0275,\n 0,\n 0.73334\n ],\n \"90\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.67223\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.34306\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.34306\n ],\n \"94\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"95\": [\n 0.35,\n 0.10833,\n 0.03056,\n 0,\n 0.55\n ],\n \"97\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.525\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.56111\n ],\n \"99\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.48889\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.56111\n ],\n \"101\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.51111\n ],\n \"102\": [\n 0,\n 0.69444,\n 0.07639,\n 0,\n 0.33611\n ],\n \"103\": [\n 0.19444,\n 0.45833,\n 0.01528,\n 0,\n 0.55\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.56111\n ],\n \"105\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.25556\n ],\n \"106\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.28611\n ],\n \"107\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.53056\n ],\n \"108\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.25556\n ],\n \"109\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.86667\n ],\n \"110\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.56111\n ],\n \"111\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.55\n ],\n \"112\": [\n 0.19444,\n 0.45833,\n 0,\n 0,\n 0.56111\n ],\n \"113\": [\n 0.19444,\n 0.45833,\n 0,\n 0,\n 0.56111\n ],\n \"114\": [\n 0,\n 0.45833,\n 0.01528,\n 0,\n 0.37222\n ],\n \"115\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.42167\n ],\n \"116\": [\n 0,\n 0.58929,\n 0,\n 0,\n 0.40417\n ],\n \"117\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.56111\n ],\n \"118\": [\n 0,\n 0.45833,\n 0.01528,\n 0,\n 0.5\n ],\n \"119\": [\n 0,\n 0.45833,\n 0.01528,\n 0,\n 0.74445\n ],\n \"120\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.5\n ],\n \"121\": [\n 0.19444,\n 0.45833,\n 0.01528,\n 0,\n 0.5\n ],\n \"122\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.47639\n ],\n \"126\": [\n 0.35,\n 0.34444,\n 0,\n 0,\n 0.55\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"168\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"180\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.48889\n ],\n \"305\": [\n 0,\n 0.45833,\n 0,\n 0,\n 0.25556\n ],\n \"567\": [\n 0.19444,\n 0.45833,\n 0,\n 0,\n 0.28611\n ],\n \"710\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"711\": [\n 0,\n 0.63542,\n 0,\n 0,\n 0.55\n ],\n \"713\": [\n 0,\n 0.63778,\n 0,\n 0,\n 0.55\n ],\n \"728\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"729\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.30556\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"732\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"733\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55\n ],\n \"915\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.58056\n ],\n \"916\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.91667\n ],\n \"920\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.85556\n ],\n \"923\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.67223\n ],\n \"926\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73334\n ],\n \"928\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"931\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"933\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.85556\n ],\n \"934\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"936\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.85556\n ],\n \"937\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.79445\n ],\n \"8211\": [\n 0,\n 0.45833,\n 0.03056,\n 0,\n 0.55\n ],\n \"8212\": [\n 0,\n 0.45833,\n 0.03056,\n 0,\n 1.10001\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.30556\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.30556\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55834\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55834\n ]\n },\n \"SansSerif-Italic\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0.05733,\n 0,\n 0.31945\n ],\n \"34\": [\n 0,\n 0.69444,\n 0.00316,\n 0,\n 0.5\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0.05087,\n 0,\n 0.83334\n ],\n \"36\": [\n 0.05556,\n 0.75,\n 0.11156,\n 0,\n 0.5\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0.03126,\n 0,\n 0.83334\n ],\n \"38\": [\n 0,\n 0.69444,\n 0.03058,\n 0,\n 0.75834\n ],\n \"39\": [\n 0,\n 0.69444,\n 0.07816,\n 0,\n 0.27778\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0.13164,\n 0,\n 0.38889\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0.02536,\n 0,\n 0.38889\n ],\n \"42\": [\n 0,\n 0.75,\n 0.11775,\n 0,\n 0.5\n ],\n \"43\": [\n 0.08333,\n 0.58333,\n 0.02536,\n 0,\n 0.77778\n ],\n \"44\": [\n 0.125,\n 0.08333,\n 0,\n 0,\n 0.27778\n ],\n \"45\": [\n 0,\n 0.44444,\n 0.01946,\n 0,\n 0.33333\n ],\n \"46\": [\n 0,\n 0.08333,\n 0,\n 0,\n 0.27778\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0.13164,\n 0,\n 0.5\n ],\n \"48\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"49\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"50\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"51\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"52\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"53\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"54\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"55\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"56\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"57\": [\n 0,\n 0.65556,\n 0.11156,\n 0,\n 0.5\n ],\n \"58\": [\n 0,\n 0.44444,\n 0.02502,\n 0,\n 0.27778\n ],\n \"59\": [\n 0.125,\n 0.44444,\n 0.02502,\n 0,\n 0.27778\n ],\n \"61\": [\n -0.13,\n 0.37,\n 0.05087,\n 0,\n 0.77778\n ],\n \"63\": [\n 0,\n 0.69444,\n 0.11809,\n 0,\n 0.47222\n ],\n \"64\": [\n 0,\n 0.69444,\n 0.07555,\n 0,\n 0.66667\n ],\n \"65\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"66\": [\n 0,\n 0.69444,\n 0.08293,\n 0,\n 0.66667\n ],\n \"67\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.63889\n ],\n \"68\": [\n 0,\n 0.69444,\n 0.07555,\n 0,\n 0.72223\n ],\n \"69\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.59722\n ],\n \"70\": [\n 0,\n 0.69444,\n 0.13372,\n 0,\n 0.56945\n ],\n \"71\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.66667\n ],\n \"72\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.70834\n ],\n \"73\": [\n 0,\n 0.69444,\n 0.13372,\n 0,\n 0.27778\n ],\n \"74\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.47222\n ],\n \"75\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.69445\n ],\n \"76\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.54167\n ],\n \"77\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.875\n ],\n \"78\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.70834\n ],\n \"79\": [\n 0,\n 0.69444,\n 0.07555,\n 0,\n 0.73611\n ],\n \"80\": [\n 0,\n 0.69444,\n 0.08293,\n 0,\n 0.63889\n ],\n \"81\": [\n 0.125,\n 0.69444,\n 0.07555,\n 0,\n 0.73611\n ],\n \"82\": [\n 0,\n 0.69444,\n 0.08293,\n 0,\n 0.64584\n ],\n \"83\": [\n 0,\n 0.69444,\n 0.09205,\n 0,\n 0.55556\n ],\n \"84\": [\n 0,\n 0.69444,\n 0.13372,\n 0,\n 0.68056\n ],\n \"85\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.6875\n ],\n \"86\": [\n 0,\n 0.69444,\n 0.1615,\n 0,\n 0.66667\n ],\n \"87\": [\n 0,\n 0.69444,\n 0.1615,\n 0,\n 0.94445\n ],\n \"88\": [\n 0,\n 0.69444,\n 0.13372,\n 0,\n 0.66667\n ],\n \"89\": [\n 0,\n 0.69444,\n 0.17261,\n 0,\n 0.66667\n ],\n \"90\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.61111\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0.15942,\n 0,\n 0.28889\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0.08719,\n 0,\n 0.28889\n ],\n \"94\": [\n 0,\n 0.69444,\n 0.0799,\n 0,\n 0.5\n ],\n \"95\": [\n 0.35,\n 0.09444,\n 0.08616,\n 0,\n 0.5\n ],\n \"97\": [\n 0,\n 0.44444,\n 0.00981,\n 0,\n 0.48056\n ],\n \"98\": [\n 0,\n 0.69444,\n 0.03057,\n 0,\n 0.51667\n ],\n \"99\": [\n 0,\n 0.44444,\n 0.08336,\n 0,\n 0.44445\n ],\n \"100\": [\n 0,\n 0.69444,\n 0.09483,\n 0,\n 0.51667\n ],\n \"101\": [\n 0,\n 0.44444,\n 0.06778,\n 0,\n 0.44445\n ],\n \"102\": [\n 0,\n 0.69444,\n 0.21705,\n 0,\n 0.30556\n ],\n \"103\": [\n 0.19444,\n 0.44444,\n 0.10836,\n 0,\n 0.5\n ],\n \"104\": [\n 0,\n 0.69444,\n 0.01778,\n 0,\n 0.51667\n ],\n \"105\": [\n 0,\n 0.67937,\n 0.09718,\n 0,\n 0.23889\n ],\n \"106\": [\n 0.19444,\n 0.67937,\n 0.09162,\n 0,\n 0.26667\n ],\n \"107\": [\n 0,\n 0.69444,\n 0.08336,\n 0,\n 0.48889\n ],\n \"108\": [\n 0,\n 0.69444,\n 0.09483,\n 0,\n 0.23889\n ],\n \"109\": [\n 0,\n 0.44444,\n 0.01778,\n 0,\n 0.79445\n ],\n \"110\": [\n 0,\n 0.44444,\n 0.01778,\n 0,\n 0.51667\n ],\n \"111\": [\n 0,\n 0.44444,\n 0.06613,\n 0,\n 0.5\n ],\n \"112\": [\n 0.19444,\n 0.44444,\n 0.0389,\n 0,\n 0.51667\n ],\n \"113\": [\n 0.19444,\n 0.44444,\n 0.04169,\n 0,\n 0.51667\n ],\n \"114\": [\n 0,\n 0.44444,\n 0.10836,\n 0,\n 0.34167\n ],\n \"115\": [\n 0,\n 0.44444,\n 0.0778,\n 0,\n 0.38333\n ],\n \"116\": [\n 0,\n 0.57143,\n 0.07225,\n 0,\n 0.36111\n ],\n \"117\": [\n 0,\n 0.44444,\n 0.04169,\n 0,\n 0.51667\n ],\n \"118\": [\n 0,\n 0.44444,\n 0.10836,\n 0,\n 0.46111\n ],\n \"119\": [\n 0,\n 0.44444,\n 0.10836,\n 0,\n 0.68334\n ],\n \"120\": [\n 0,\n 0.44444,\n 0.09169,\n 0,\n 0.46111\n ],\n \"121\": [\n 0.19444,\n 0.44444,\n 0.10836,\n 0,\n 0.46111\n ],\n \"122\": [\n 0,\n 0.44444,\n 0.08752,\n 0,\n 0.43472\n ],\n \"126\": [\n 0.35,\n 0.32659,\n 0.08826,\n 0,\n 0.5\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"168\": [\n 0,\n 0.67937,\n 0.06385,\n 0,\n 0.5\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73752\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.44445\n ],\n \"305\": [\n 0,\n 0.44444,\n 0.04169,\n 0,\n 0.23889\n ],\n \"567\": [\n 0.19444,\n 0.44444,\n 0.04169,\n 0,\n 0.26667\n ],\n \"710\": [\n 0,\n 0.69444,\n 0.0799,\n 0,\n 0.5\n ],\n \"711\": [\n 0,\n 0.63194,\n 0.08432,\n 0,\n 0.5\n ],\n \"713\": [\n 0,\n 0.60889,\n 0.08776,\n 0,\n 0.5\n ],\n \"714\": [\n 0,\n 0.69444,\n 0.09205,\n 0,\n 0.5\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"728\": [\n 0,\n 0.69444,\n 0.09483,\n 0,\n 0.5\n ],\n \"729\": [\n 0,\n 0.67937,\n 0.07774,\n 0,\n 0.27778\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73752\n ],\n \"732\": [\n 0,\n 0.67659,\n 0.08826,\n 0,\n 0.5\n ],\n \"733\": [\n 0,\n 0.69444,\n 0.09205,\n 0,\n 0.5\n ],\n \"915\": [\n 0,\n 0.69444,\n 0.13372,\n 0,\n 0.54167\n ],\n \"916\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83334\n ],\n \"920\": [\n 0,\n 0.69444,\n 0.07555,\n 0,\n 0.77778\n ],\n \"923\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"926\": [\n 0,\n 0.69444,\n 0.12816,\n 0,\n 0.66667\n ],\n \"928\": [\n 0,\n 0.69444,\n 0.08094,\n 0,\n 0.70834\n ],\n \"931\": [\n 0,\n 0.69444,\n 0.11983,\n 0,\n 0.72222\n ],\n \"933\": [\n 0,\n 0.69444,\n 0.09031,\n 0,\n 0.77778\n ],\n \"934\": [\n 0,\n 0.69444,\n 0.04603,\n 0,\n 0.72222\n ],\n \"936\": [\n 0,\n 0.69444,\n 0.09031,\n 0,\n 0.77778\n ],\n \"937\": [\n 0,\n 0.69444,\n 0.08293,\n 0,\n 0.72222\n ],\n \"8211\": [\n 0,\n 0.44444,\n 0.08616,\n 0,\n 0.5\n ],\n \"8212\": [\n 0,\n 0.44444,\n 0.08616,\n 0,\n 1.0\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0.07816,\n 0,\n 0.27778\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0.07816,\n 0,\n 0.27778\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0.14205,\n 0,\n 0.5\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0.00316,\n 0,\n 0.5\n ]\n },\n \"SansSerif-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"33\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.31945\n ],\n \"34\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"35\": [\n 0.19444,\n 0.69444,\n 0,\n 0,\n 0.83334\n ],\n \"36\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"37\": [\n 0.05556,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"38\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.75834\n ],\n \"39\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"40\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"41\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.38889\n ],\n \"42\": [\n 0,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"43\": [\n 0.08333,\n 0.58333,\n 0,\n 0,\n 0.77778\n ],\n \"44\": [\n 0.125,\n 0.08333,\n 0,\n 0,\n 0.27778\n ],\n \"45\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.33333\n ],\n \"46\": [\n 0,\n 0.08333,\n 0,\n 0,\n 0.27778\n ],\n \"47\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.5\n ],\n \"48\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"49\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"50\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"51\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"52\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"53\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"54\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"55\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"56\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"57\": [\n 0,\n 0.65556,\n 0,\n 0,\n 0.5\n ],\n \"58\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.27778\n ],\n \"59\": [\n 0.125,\n 0.44444,\n 0,\n 0,\n 0.27778\n ],\n \"61\": [\n -0.13,\n 0.37,\n 0,\n 0,\n 0.77778\n ],\n \"63\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.47222\n ],\n \"64\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"65\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"66\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"67\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"68\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72223\n ],\n \"69\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.59722\n ],\n \"70\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.56945\n ],\n \"71\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"72\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70834\n ],\n \"73\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"74\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.47222\n ],\n \"75\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.69445\n ],\n \"76\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.54167\n ],\n \"77\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.875\n ],\n \"78\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70834\n ],\n \"79\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.73611\n ],\n \"80\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.63889\n ],\n \"81\": [\n 0.125,\n 0.69444,\n 0,\n 0,\n 0.73611\n ],\n \"82\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.64584\n ],\n \"83\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.55556\n ],\n \"84\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.68056\n ],\n \"85\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.6875\n ],\n \"86\": [\n 0,\n 0.69444,\n 0.01389,\n 0,\n 0.66667\n ],\n \"87\": [\n 0,\n 0.69444,\n 0.01389,\n 0,\n 0.94445\n ],\n \"88\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"89\": [\n 0,\n 0.69444,\n 0.025,\n 0,\n 0.66667\n ],\n \"90\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"91\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.28889\n ],\n \"93\": [\n 0.25,\n 0.75,\n 0,\n 0,\n 0.28889\n ],\n \"94\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"95\": [\n 0.35,\n 0.09444,\n 0.02778,\n 0,\n 0.5\n ],\n \"97\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.48056\n ],\n \"98\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51667\n ],\n \"99\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.44445\n ],\n \"100\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51667\n ],\n \"101\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.44445\n ],\n \"102\": [\n 0,\n 0.69444,\n 0.06944,\n 0,\n 0.30556\n ],\n \"103\": [\n 0.19444,\n 0.44444,\n 0.01389,\n 0,\n 0.5\n ],\n \"104\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.51667\n ],\n \"105\": [\n 0,\n 0.67937,\n 0,\n 0,\n 0.23889\n ],\n \"106\": [\n 0.19444,\n 0.67937,\n 0,\n 0,\n 0.26667\n ],\n \"107\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.48889\n ],\n \"108\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.23889\n ],\n \"109\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.79445\n ],\n \"110\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.51667\n ],\n \"111\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.5\n ],\n \"112\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.51667\n ],\n \"113\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.51667\n ],\n \"114\": [\n 0,\n 0.44444,\n 0.01389,\n 0,\n 0.34167\n ],\n \"115\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.38333\n ],\n \"116\": [\n 0,\n 0.57143,\n 0,\n 0,\n 0.36111\n ],\n \"117\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.51667\n ],\n \"118\": [\n 0,\n 0.44444,\n 0.01389,\n 0,\n 0.46111\n ],\n \"119\": [\n 0,\n 0.44444,\n 0.01389,\n 0,\n 0.68334\n ],\n \"120\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.46111\n ],\n \"121\": [\n 0.19444,\n 0.44444,\n 0.01389,\n 0,\n 0.46111\n ],\n \"122\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.43472\n ],\n \"126\": [\n 0.35,\n 0.32659,\n 0,\n 0,\n 0.5\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"168\": [\n 0,\n 0.67937,\n 0,\n 0,\n 0.5\n ],\n \"176\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"184\": [\n 0.17014,\n 0,\n 0,\n 0,\n 0.44445\n ],\n \"305\": [\n 0,\n 0.44444,\n 0,\n 0,\n 0.23889\n ],\n \"567\": [\n 0.19444,\n 0.44444,\n 0,\n 0,\n 0.26667\n ],\n \"710\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"711\": [\n 0,\n 0.63194,\n 0,\n 0,\n 0.5\n ],\n \"713\": [\n 0,\n 0.60889,\n 0,\n 0,\n 0.5\n ],\n \"714\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"715\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"728\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"729\": [\n 0,\n 0.67937,\n 0,\n 0,\n 0.27778\n ],\n \"730\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"732\": [\n 0,\n 0.67659,\n 0,\n 0,\n 0.5\n ],\n \"733\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"915\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.54167\n ],\n \"916\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.83334\n ],\n \"920\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"923\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.61111\n ],\n \"926\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.66667\n ],\n \"928\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.70834\n ],\n \"931\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72222\n ],\n \"933\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"934\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72222\n ],\n \"936\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.77778\n ],\n \"937\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.72222\n ],\n \"8211\": [\n 0,\n 0.44444,\n 0.02778,\n 0,\n 0.5\n ],\n \"8212\": [\n 0,\n 0.44444,\n 0.02778,\n 0,\n 1.0\n ],\n \"8216\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"8217\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.27778\n ],\n \"8220\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ],\n \"8221\": [\n 0,\n 0.69444,\n 0,\n 0,\n 0.5\n ]\n },\n \"Script-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"65\": [\n 0,\n 0.7,\n 0.22925,\n 0,\n 0.80253\n ],\n \"66\": [\n 0,\n 0.7,\n 0.04087,\n 0,\n 0.90757\n ],\n \"67\": [\n 0,\n 0.7,\n 0.1689,\n 0,\n 0.66619\n ],\n \"68\": [\n 0,\n 0.7,\n 0.09371,\n 0,\n 0.77443\n ],\n \"69\": [\n 0,\n 0.7,\n 0.18583,\n 0,\n 0.56162\n ],\n \"70\": [\n 0,\n 0.7,\n 0.13634,\n 0,\n 0.89544\n ],\n \"71\": [\n 0,\n 0.7,\n 0.17322,\n 0,\n 0.60961\n ],\n \"72\": [\n 0,\n 0.7,\n 0.29694,\n 0,\n 0.96919\n ],\n \"73\": [\n 0,\n 0.7,\n 0.19189,\n 0,\n 0.80907\n ],\n \"74\": [\n 0.27778,\n 0.7,\n 0.19189,\n 0,\n 1.05159\n ],\n \"75\": [\n 0,\n 0.7,\n 0.31259,\n 0,\n 0.91364\n ],\n \"76\": [\n 0,\n 0.7,\n 0.19189,\n 0,\n 0.87373\n ],\n \"77\": [\n 0,\n 0.7,\n 0.15981,\n 0,\n 1.08031\n ],\n \"78\": [\n 0,\n 0.7,\n 0.3525,\n 0,\n 0.9015\n ],\n \"79\": [\n 0,\n 0.7,\n 0.08078,\n 0,\n 0.73787\n ],\n \"80\": [\n 0,\n 0.7,\n 0.08078,\n 0,\n 1.01262\n ],\n \"81\": [\n 0,\n 0.7,\n 0.03305,\n 0,\n 0.88282\n ],\n \"82\": [\n 0,\n 0.7,\n 0.06259,\n 0,\n 0.85\n ],\n \"83\": [\n 0,\n 0.7,\n 0.19189,\n 0,\n 0.86767\n ],\n \"84\": [\n 0,\n 0.7,\n 0.29087,\n 0,\n 0.74697\n ],\n \"85\": [\n 0,\n 0.7,\n 0.25815,\n 0,\n 0.79996\n ],\n \"86\": [\n 0,\n 0.7,\n 0.27523,\n 0,\n 0.62204\n ],\n \"87\": [\n 0,\n 0.7,\n 0.27523,\n 0,\n 0.80532\n ],\n \"88\": [\n 0,\n 0.7,\n 0.26006,\n 0,\n 0.94445\n ],\n \"89\": [\n 0,\n 0.7,\n 0.2939,\n 0,\n 0.70961\n ],\n \"90\": [\n 0,\n 0.7,\n 0.24037,\n 0,\n 0.8212\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ]\n },\n \"Size1-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"40\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.45834\n ],\n \"41\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.45834\n ],\n \"47\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.57778\n ],\n \"91\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.41667\n ],\n \"92\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.57778\n ],\n \"93\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.41667\n ],\n \"123\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.58334\n ],\n \"125\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.58334\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"710\": [\n 0,\n 0.72222,\n 0,\n 0,\n 0.55556\n ],\n \"732\": [\n 0,\n 0.72222,\n 0,\n 0,\n 0.55556\n ],\n \"770\": [\n 0,\n 0.72222,\n 0,\n 0,\n 0.55556\n ],\n \"771\": [\n 0,\n 0.72222,\n 0,\n 0,\n 0.55556\n ],\n \"8214\": [\n -0.00099,\n 0.601,\n 0,\n 0,\n 0.77778\n ],\n \"8593\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.66667\n ],\n \"8595\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.66667\n ],\n \"8657\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.77778\n ],\n \"8659\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.77778\n ],\n \"8719\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.94445\n ],\n \"8720\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.94445\n ],\n \"8721\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 1.05556\n ],\n \"8730\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 1.0\n ],\n \"8739\": [\n -0.00599,\n 0.606,\n 0,\n 0,\n 0.33333\n ],\n \"8741\": [\n -0.00599,\n 0.606,\n 0,\n 0,\n 0.55556\n ],\n \"8747\": [\n 0.30612,\n 0.805,\n 0.19445,\n 0,\n 0.47222\n ],\n \"8748\": [\n 0.306,\n 0.805,\n 0.19445,\n 0,\n 0.47222\n ],\n \"8749\": [\n 0.306,\n 0.805,\n 0.19445,\n 0,\n 0.47222\n ],\n \"8750\": [\n 0.30612,\n 0.805,\n 0.19445,\n 0,\n 0.47222\n ],\n \"8896\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"8897\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"8898\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"8899\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"8968\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"8969\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"8970\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"8971\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"9168\": [\n -0.00099,\n 0.601,\n 0,\n 0,\n 0.66667\n ],\n \"10216\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"10217\": [\n 0.35001,\n 0.85,\n 0,\n 0,\n 0.47222\n ],\n \"10752\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 1.11111\n ],\n \"10753\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 1.11111\n ],\n \"10754\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 1.11111\n ],\n \"10756\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ],\n \"10758\": [\n 0.25001,\n 0.75,\n 0,\n 0,\n 0.83334\n ]\n },\n \"Size2-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"40\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.59722\n ],\n \"41\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.59722\n ],\n \"47\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.81111\n ],\n \"91\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.47222\n ],\n \"92\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.81111\n ],\n \"93\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.47222\n ],\n \"123\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.66667\n ],\n \"125\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.66667\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"710\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.0\n ],\n \"732\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.0\n ],\n \"770\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.0\n ],\n \"771\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.0\n ],\n \"8719\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.27778\n ],\n \"8720\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.27778\n ],\n \"8721\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.44445\n ],\n \"8730\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 1.0\n ],\n \"8747\": [\n 0.86225,\n 1.36,\n 0.44445,\n 0,\n 0.55556\n ],\n \"8748\": [\n 0.862,\n 1.36,\n 0.44445,\n 0,\n 0.55556\n ],\n \"8749\": [\n 0.862,\n 1.36,\n 0.44445,\n 0,\n 0.55556\n ],\n \"8750\": [\n 0.86225,\n 1.36,\n 0.44445,\n 0,\n 0.55556\n ],\n \"8896\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ],\n \"8897\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ],\n \"8898\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ],\n \"8899\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ],\n \"8968\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.52778\n ],\n \"8969\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.52778\n ],\n \"8970\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.52778\n ],\n \"8971\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.52778\n ],\n \"10216\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.61111\n ],\n \"10217\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.61111\n ],\n \"10752\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.51112\n ],\n \"10753\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.51112\n ],\n \"10754\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.51112\n ],\n \"10756\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ],\n \"10758\": [\n 0.55001,\n 1.05,\n 0,\n 0,\n 1.11111\n ]\n },\n \"Size3-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"40\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.73611\n ],\n \"41\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.73611\n ],\n \"47\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 1.04445\n ],\n \"91\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.52778\n ],\n \"92\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 1.04445\n ],\n \"93\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.52778\n ],\n \"123\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.75\n ],\n \"125\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.75\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"710\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.44445\n ],\n \"732\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.44445\n ],\n \"770\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.44445\n ],\n \"771\": [\n 0,\n 0.75,\n 0,\n 0,\n 1.44445\n ],\n \"8730\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 1.0\n ],\n \"8968\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.58334\n ],\n \"8969\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.58334\n ],\n \"8970\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.58334\n ],\n \"8971\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.58334\n ],\n \"10216\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.75\n ],\n \"10217\": [\n 0.95003,\n 1.45,\n 0,\n 0,\n 0.75\n ]\n },\n \"Size4-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"40\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.79167\n ],\n \"41\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.79167\n ],\n \"47\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 1.27778\n ],\n \"91\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.58334\n ],\n \"92\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 1.27778\n ],\n \"93\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.58334\n ],\n \"123\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.80556\n ],\n \"125\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.80556\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.25\n ],\n \"710\": [\n 0,\n 0.825,\n 0,\n 0,\n 1.8889\n ],\n \"732\": [\n 0,\n 0.825,\n 0,\n 0,\n 1.8889\n ],\n \"770\": [\n 0,\n 0.825,\n 0,\n 0,\n 1.8889\n ],\n \"771\": [\n 0,\n 0.825,\n 0,\n 0,\n 1.8889\n ],\n \"8730\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 1.0\n ],\n \"8968\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.63889\n ],\n \"8969\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.63889\n ],\n \"8970\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.63889\n ],\n \"8971\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.63889\n ],\n \"9115\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.875\n ],\n \"9116\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.875\n ],\n \"9117\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.875\n ],\n \"9118\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.875\n ],\n \"9119\": [\n 1e-05,\n 0.6,\n 0,\n 0,\n 0.875\n ],\n \"9120\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.875\n ],\n \"9121\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.66667\n ],\n \"9122\": [\n -0.00099,\n 0.601,\n 0,\n 0,\n 0.66667\n ],\n \"9123\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.66667\n ],\n \"9124\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.66667\n ],\n \"9125\": [\n -0.00099,\n 0.601,\n 0,\n 0,\n 0.66667\n ],\n \"9126\": [\n 0.64502,\n 1.155,\n 0,\n 0,\n 0.66667\n ],\n \"9127\": [\n 1e-05,\n 0.9,\n 0,\n 0,\n 0.88889\n ],\n \"9128\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.88889\n ],\n \"9129\": [\n 0.90001,\n 0,\n 0,\n 0,\n 0.88889\n ],\n \"9130\": [\n 0,\n 0.3,\n 0,\n 0,\n 0.88889\n ],\n \"9131\": [\n 1e-05,\n 0.9,\n 0,\n 0,\n 0.88889\n ],\n \"9132\": [\n 0.65002,\n 1.15,\n 0,\n 0,\n 0.88889\n ],\n \"9133\": [\n 0.90001,\n 0,\n 0,\n 0,\n 0.88889\n ],\n \"9143\": [\n 0.88502,\n 0.915,\n 0,\n 0,\n 1.05556\n ],\n \"10216\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.80556\n ],\n \"10217\": [\n 1.25003,\n 1.75,\n 0,\n 0,\n 0.80556\n ],\n \"57344\": [\n -0.00499,\n 0.605,\n 0,\n 0,\n 1.05556\n ],\n \"57345\": [\n -0.00499,\n 0.605,\n 0,\n 0,\n 1.05556\n ],\n \"57680\": [\n 0,\n 0.12,\n 0,\n 0,\n 0.45\n ],\n \"57681\": [\n 0,\n 0.12,\n 0,\n 0,\n 0.45\n ],\n \"57682\": [\n 0,\n 0.12,\n 0,\n 0,\n 0.45\n ],\n \"57683\": [\n 0,\n 0.12,\n 0,\n 0,\n 0.45\n ]\n },\n \"Typewriter-Regular\": {\n \"32\": [\n 0,\n 0,\n 0,\n 0,\n 0.525\n ],\n \"33\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"34\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"35\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"36\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"37\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"38\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"39\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"40\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"41\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"42\": [\n 0,\n 0.52083,\n 0,\n 0,\n 0.525\n ],\n \"43\": [\n -0.08056,\n 0.53055,\n 0,\n 0,\n 0.525\n ],\n \"44\": [\n 0.13889,\n 0.125,\n 0,\n 0,\n 0.525\n ],\n \"45\": [\n -0.08056,\n 0.53055,\n 0,\n 0,\n 0.525\n ],\n \"46\": [\n 0,\n 0.125,\n 0,\n 0,\n 0.525\n ],\n \"47\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"48\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"49\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"50\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"51\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"52\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"53\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"54\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"55\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"56\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"57\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"58\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"59\": [\n 0.13889,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"60\": [\n -0.05556,\n 0.55556,\n 0,\n 0,\n 0.525\n ],\n \"61\": [\n -0.19549,\n 0.41562,\n 0,\n 0,\n 0.525\n ],\n \"62\": [\n -0.05556,\n 0.55556,\n 0,\n 0,\n 0.525\n ],\n \"63\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"64\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"65\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"66\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"67\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"68\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"69\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"70\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"71\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"72\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"73\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"74\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"75\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"76\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"77\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"78\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"79\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"80\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"81\": [\n 0.13889,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"82\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"83\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"84\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"85\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"86\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"87\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"88\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"89\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"90\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"91\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"92\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"93\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"94\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"95\": [\n 0.09514,\n 0,\n 0,\n 0,\n 0.525\n ],\n \"96\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"97\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"98\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"99\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"100\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"101\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"102\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"103\": [\n 0.22222,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"104\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"105\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"106\": [\n 0.22222,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"107\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"108\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"109\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"110\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"111\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"112\": [\n 0.22222,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"113\": [\n 0.22222,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"114\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"115\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"116\": [\n 0,\n 0.55358,\n 0,\n 0,\n 0.525\n ],\n \"117\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"118\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"119\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"120\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"121\": [\n 0.22222,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"122\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"123\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"124\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"125\": [\n 0.08333,\n 0.69444,\n 0,\n 0,\n 0.525\n ],\n \"126\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"127\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"160\": [\n 0,\n 0,\n 0,\n 0,\n 0.525\n ],\n \"176\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"184\": [\n 0.19445,\n 0,\n 0,\n 0,\n 0.525\n ],\n \"305\": [\n 0,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"567\": [\n 0.22222,\n 0.43056,\n 0,\n 0,\n 0.525\n ],\n \"711\": [\n 0,\n 0.56597,\n 0,\n 0,\n 0.525\n ],\n \"713\": [\n 0,\n 0.56555,\n 0,\n 0,\n 0.525\n ],\n \"714\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"715\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"728\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"730\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"770\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"771\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"776\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"915\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"916\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"920\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"923\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"926\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"928\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"931\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"933\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"934\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"936\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"937\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"8216\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"8217\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"8242\": [\n 0,\n 0.61111,\n 0,\n 0,\n 0.525\n ],\n \"9251\": [\n 0.11111,\n 0.21944,\n 0,\n 0,\n 0.525\n ]\n }\n};\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */ // In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n// latex -interaction=nonstopmode \\\n// '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n// '$a$ \\expandafter\\show\\the\\textfont2' \\\n// '\\expandafter\\show\\the\\scriptfont2' \\\n// '\\expandafter\\show\\the\\scriptscriptfont2' \\\n// '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n// tftopl cmsy10\n// tftopl cmsy7\n// tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy. The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n slant: [\n 0.250,\n 0.250,\n 0.250\n ],\n // sigma1\n space: [\n 0.000,\n 0.000,\n 0.000\n ],\n // sigma2\n stretch: [\n 0.000,\n 0.000,\n 0.000\n ],\n // sigma3\n shrink: [\n 0.000,\n 0.000,\n 0.000\n ],\n // sigma4\n xHeight: [\n 0.431,\n 0.431,\n 0.431\n ],\n // sigma5\n quad: [\n 1.000,\n 1.171,\n 1.472\n ],\n // sigma6\n extraSpace: [\n 0.000,\n 0.000,\n 0.000\n ],\n // sigma7\n num1: [\n 0.677,\n 0.732,\n 0.925\n ],\n // sigma8\n num2: [\n 0.394,\n 0.384,\n 0.387\n ],\n // sigma9\n num3: [\n 0.444,\n 0.471,\n 0.504\n ],\n // sigma10\n denom1: [\n 0.686,\n 0.752,\n 1.025\n ],\n // sigma11\n denom2: [\n 0.345,\n 0.344,\n 0.532\n ],\n // sigma12\n sup1: [\n 0.413,\n 0.503,\n 0.504\n ],\n // sigma13\n sup2: [\n 0.363,\n 0.431,\n 0.404\n ],\n // sigma14\n sup3: [\n 0.289,\n 0.286,\n 0.294\n ],\n // sigma15\n sub1: [\n 0.150,\n 0.143,\n 0.200\n ],\n // sigma16\n sub2: [\n 0.247,\n 0.286,\n 0.400\n ],\n // sigma17\n supDrop: [\n 0.386,\n 0.353,\n 0.494\n ],\n // sigma18\n subDrop: [\n 0.050,\n 0.071,\n 0.100\n ],\n // sigma19\n delim1: [\n 2.390,\n 1.700,\n 1.980\n ],\n // sigma20\n delim2: [\n 1.010,\n 1.157,\n 1.420\n ],\n // sigma21\n axisHeight: [\n 0.250,\n 0.250,\n 0.250\n ],\n // sigma22\n // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n // they correspond to the font parameters of the extension fonts (family 3).\n // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n // values.\n defaultRuleThickness: [\n 0.04,\n 0.049,\n 0.049\n ],\n // xi8; cmex7: 0.049\n bigOpSpacing1: [\n 0.111,\n 0.111,\n 0.111\n ],\n // xi9\n bigOpSpacing2: [\n 0.166,\n 0.166,\n 0.166\n ],\n // xi10\n bigOpSpacing3: [\n 0.2,\n 0.2,\n 0.2\n ],\n // xi11\n bigOpSpacing4: [\n 0.6,\n 0.611,\n 0.611\n ],\n // xi12; cmex7: 0.611\n bigOpSpacing5: [\n 0.1,\n 0.143,\n 0.143\n ],\n // xi13; cmex7: 0.143\n // The \\sqrt rule width is taken from the height of the surd character.\n // Since we use the same font at all sizes, this thickness doesn't scale.\n sqrtRuleThickness: [\n 0.04,\n 0.04,\n 0.04\n ],\n // This value determines how large a pt is, for metrics which are defined\n // in terms of pts.\n // This value is also used in katex.less; if you change it make sure the\n // values match.\n ptPerEm: [\n 10.0,\n 10.0,\n 10.0\n ],\n // The space between adjacent `|` columns in an array definition. From\n // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n doubleRuleSep: [\n 0.2,\n 0.2,\n 0.2\n ],\n // The width of separator lines in {array} environments. From\n // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n arrayRuleWidth: [\n 0.04,\n 0.04,\n 0.04\n ],\n // Two values from LaTeX source2e:\n fboxsep: [\n 0.3,\n 0.3,\n 0.3\n ],\n // 3 pt / ptPerEm\n fboxrule: [\n 0.04,\n 0.04,\n 0.04\n ] // 0.4 pt / ptPerEm\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system. The metrics do not account for extra height from the\n// accents. In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\nvar extraCharacterMap = {\n // Latin-1\n \"\\xc5\": \"A\",\n \"\\xd0\": \"D\",\n \"\\xde\": \"o\",\n \"\\xe5\": \"a\",\n \"\\xf0\": \"d\",\n \"\\xfe\": \"o\",\n // Cyrillic\n \"А\": \"A\",\n \"Б\": \"B\",\n \"В\": \"B\",\n \"Г\": \"F\",\n \"Д\": \"A\",\n \"Е\": \"E\",\n \"Ж\": \"K\",\n \"З\": \"3\",\n \"И\": \"N\",\n \"Й\": \"N\",\n \"К\": \"K\",\n \"Л\": \"N\",\n \"М\": \"M\",\n \"Н\": \"H\",\n \"О\": \"O\",\n \"П\": \"N\",\n \"Р\": \"P\",\n \"С\": \"C\",\n \"Т\": \"T\",\n \"У\": \"y\",\n \"Ф\": \"O\",\n \"Х\": \"X\",\n \"Ц\": \"U\",\n \"Ч\": \"h\",\n \"Ш\": \"W\",\n \"Щ\": \"W\",\n \"Ъ\": \"B\",\n \"Ы\": \"X\",\n \"Ь\": \"B\",\n \"Э\": \"3\",\n \"Ю\": \"X\",\n \"Я\": \"R\",\n \"а\": \"a\",\n \"б\": \"b\",\n \"в\": \"a\",\n \"г\": \"r\",\n \"д\": \"y\",\n \"е\": \"e\",\n \"ж\": \"m\",\n \"з\": \"e\",\n \"и\": \"n\",\n \"й\": \"n\",\n \"к\": \"n\",\n \"л\": \"n\",\n \"м\": \"m\",\n \"н\": \"n\",\n \"о\": \"o\",\n \"п\": \"n\",\n \"р\": \"p\",\n \"с\": \"c\",\n \"т\": \"o\",\n \"у\": \"y\",\n \"ф\": \"b\",\n \"х\": \"x\",\n \"ц\": \"n\",\n \"ч\": \"n\",\n \"ш\": \"w\",\n \"щ\": \"w\",\n \"ъ\": \"a\",\n \"ы\": \"m\",\n \"ь\": \"a\",\n \"э\": \"e\",\n \"ю\": \"m\",\n \"я\": \"r\"\n};\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */ function setFontMetrics(fontName, metrics) {\n fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */ function getCharacterMetrics(character, font, mode) {\n if (!fontMetricsData[font]) {\n throw new Error(\"Font metrics not found for font: \" + font + \".\");\n }\n var ch = character.charCodeAt(0);\n var metrics = fontMetricsData[font][ch];\n if (!metrics && character[0] in extraCharacterMap) {\n ch = extraCharacterMap[character[0]].charCodeAt(0);\n metrics = fontMetricsData[font][ch];\n }\n if (!metrics && mode === \"text\") {\n // We don't typically have font metrics for Asian scripts.\n // But since we support them in text mode, we need to return\n // some sort of metrics.\n // So if the character is in a script we support but we\n // don't have metrics for it, just use the metrics for\n // the Latin capital letter M. This is close enough because\n // we (currently) only care about the height of the glyph\n // not its width.\n if (supportedCodepoint(ch)) {\n metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n }\n }\n if (metrics) {\n return {\n depth: metrics[0],\n height: metrics[1],\n italic: metrics[2],\n skew: metrics[3],\n width: metrics[4]\n };\n }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */ function getGlobalMetrics(size) {\n var sizeIndex;\n if (size >= 5) {\n sizeIndex = 0;\n } else if (size >= 3) {\n sizeIndex = 1;\n } else {\n sizeIndex = 2;\n }\n if (!fontMetricsBySizeIndex[sizeIndex]) {\n var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n };\n for(var key in sigmasAndXis){\n if (sigmasAndXis.hasOwnProperty(key)) {\n metrics[key] = sigmasAndXis[key][sizeIndex];\n }\n }\n }\n return fontMetricsBySizeIndex[sizeIndex];\n}\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */ var sizeStyleMap = [\n // The size mappings are taken from TeX with \\normalsize=10pt.\n [\n 1,\n 1,\n 1\n ],\n [\n 2,\n 1,\n 1\n ],\n [\n 3,\n 1,\n 1\n ],\n [\n 4,\n 2,\n 1\n ],\n [\n 5,\n 2,\n 1\n ],\n [\n 6,\n 3,\n 1\n ],\n [\n 7,\n 4,\n 2\n ],\n [\n 8,\n 6,\n 3\n ],\n [\n 9,\n 7,\n 6\n ],\n [\n 10,\n 8,\n 7\n ],\n [\n 11,\n 10,\n 9\n ] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [\n // you change size indexes, change that function.\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1.0,\n 1.2,\n 1.44,\n 1.728,\n 2.074,\n 2.488\n];\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */ class Options {\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n /**\n * The base size index.\n */ constructor(data){\n this.style = void 0;\n this.color = void 0;\n this.size = void 0;\n this.textSize = void 0;\n this.phantom = void 0;\n this.font = void 0;\n this.fontFamily = void 0;\n this.fontWeight = void 0;\n this.fontShape = void 0;\n this.sizeMultiplier = void 0;\n this.maxSize = void 0;\n this.minRuleThickness = void 0;\n this._fontMetrics = void 0;\n this.style = data.style;\n this.color = data.color;\n this.size = data.size || Options.BASESIZE;\n this.textSize = data.textSize || this.size;\n this.phantom = !!data.phantom;\n this.font = data.font || \"\";\n this.fontFamily = data.fontFamily || \"\";\n this.fontWeight = data.fontWeight || \"\";\n this.fontShape = data.fontShape || \"\";\n this.sizeMultiplier = sizeMultipliers[this.size - 1];\n this.maxSize = data.maxSize;\n this.minRuleThickness = data.minRuleThickness;\n this._fontMetrics = undefined;\n }\n /**\n * Returns a new options object with the same properties as \"this\". Properties\n * from \"extension\" will be copied to the new options object.\n */ extend(extension) {\n var data = {\n style: this.style,\n size: this.size,\n textSize: this.textSize,\n color: this.color,\n phantom: this.phantom,\n font: this.font,\n fontFamily: this.fontFamily,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize,\n minRuleThickness: this.minRuleThickness\n };\n for(var key in extension){\n if (extension.hasOwnProperty(key)) {\n data[key] = extension[key];\n }\n }\n return new Options(data);\n }\n /**\n * Return an options object with the given style. If `this.style === style`,\n * returns `this`.\n */ havingStyle(style) {\n if (this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: sizeAtStyle(this.textSize, style)\n });\n }\n }\n /**\n * Return an options object with a cramped version of the current style. If\n * the current style is cramped, returns `this`.\n */ havingCrampedStyle() {\n return this.havingStyle(this.style.cramp());\n }\n /**\n * Return an options object with the given size and in at least `\\textstyle`.\n * Returns `this` if appropriate.\n */ havingSize(size) {\n if (this.size === size && this.textSize === size) {\n return this;\n } else {\n return this.extend({\n style: this.style.text(),\n size: size,\n textSize: size,\n sizeMultiplier: sizeMultipliers[size - 1]\n });\n }\n }\n /**\n * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n * changes to at least `\\textstyle`.\n */ havingBaseStyle(style) {\n style = style || this.style.text();\n var wantSize = sizeAtStyle(Options.BASESIZE, style);\n if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: wantSize\n });\n }\n }\n /**\n * Remove the effect of sizing changes such as \\Huge.\n * Keep the effect of the current style, such as \\scriptstyle.\n */ havingBaseSizing() {\n var size;\n switch(this.style.id){\n case 4:\n case 5:\n size = 3; // normalsize in scriptstyle\n break;\n case 6:\n case 7:\n size = 1; // normalsize in scriptscriptstyle\n break;\n default:\n size = 6;\n }\n return this.extend({\n style: this.style.text(),\n size: size\n });\n }\n /**\n * Create a new options object with the given color.\n */ withColor(color) {\n return this.extend({\n color: color\n });\n }\n /**\n * Create a new options object with \"phantom\" set to true.\n */ withPhantom() {\n return this.extend({\n phantom: true\n });\n }\n /**\n * Creates a new options object with the given math font or old text font.\n * @type {[type]}\n */ withFont(font) {\n return this.extend({\n font\n });\n }\n /**\n * Create a new options objects with the given fontFamily.\n */ withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */ withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */ withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: \"\"\n });\n }\n /**\n * Return the CSS sizing classes required to switch from enclosing options\n * `oldOptions` to `this`. Returns an array of classes.\n */ sizingClasses(oldOptions) {\n if (oldOptions.size !== this.size) {\n return [\n \"sizing\",\n \"reset-size\" + oldOptions.size,\n \"size\" + this.size\n ];\n } else {\n return [];\n }\n }\n /**\n * Return the CSS sizing classes required to switch to the base size. Like\n * `this.havingSize(BASESIZE).sizingClasses(this)`.\n */ baseSizingClasses() {\n if (this.size !== Options.BASESIZE) {\n return [\n \"sizing\",\n \"reset-size\" + this.size,\n \"size\" + Options.BASESIZE\n ];\n } else {\n return [];\n }\n }\n /**\n * Return the font metrics for this size.\n */ fontMetrics() {\n if (!this._fontMetrics) {\n this._fontMetrics = getGlobalMetrics(this.size);\n }\n return this._fontMetrics;\n }\n /**\n * Gets the CSS color of the current options object\n */ getColor() {\n if (this.phantom) {\n return \"transparent\";\n } else {\n return this.color;\n }\n }\n}\nOptions.BASESIZE = 6;\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into ems.\n */ // Thus, multiplying a length by this number converts the length from units\n// into pts. Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\nvar ptPerUnit = {\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n \"pt\": 1,\n // TeX point\n \"mm\": 7227 / 2540,\n // millimeter\n \"cm\": 7227 / 254,\n // centimeter\n \"in\": 72.27,\n // inch\n \"bp\": 803 / 800,\n // big (PostScript) points\n \"pc\": 12,\n // pica\n \"dd\": 1238 / 1157,\n // didot\n \"cc\": 14856 / 1157,\n // cicero (12 didot)\n \"nd\": 685 / 642,\n // new didot\n \"nc\": 1370 / 107,\n // new cicero (12 new didot)\n \"sp\": 1 / 65536,\n // scaled point (TeX's internal smallest unit)\n // https://tex.stackexchange.com/a/41371\n \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n}; // Dictionary of relative units, for fast validity testing.\nvar relativeUnit = {\n \"ex\": true,\n \"em\": true,\n \"mu\": true\n};\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */ var validUnit = function validUnit(unit) {\n if (typeof unit !== \"string\") {\n unit = unit.unit;\n }\n return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale. `options` gives the current options.\n */ var calculateSize = function calculateSize(sizeValue, options) {\n var scale;\n if (sizeValue.unit in ptPerUnit) {\n // Absolute units\n scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n / options.fontMetrics().ptPerEm // Convert pt to CSS em\n / options.sizeMultiplier; // Unscale to make absolute units\n } else if (sizeValue.unit === \"mu\") {\n // `mu` units scale with scriptstyle/scriptscriptstyle.\n scale = options.fontMetrics().cssEmPerMu;\n } else {\n // Other relative units always refer to the *textstyle* font\n // in the current size.\n var unitOptions;\n if (options.style.isTight()) {\n // isTight() means current style is script/scriptscript.\n unitOptions = options.havingStyle(options.style.text());\n } else {\n unitOptions = options;\n } // TODO: In TeX these units are relative to the quad of the current\n // *text* font, e.g. cmr10. KaTeX instead uses values from the\n // comparably-sized *Computer Modern symbol* font. At 10pt, these\n // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n // TeX \\showlists shows a kern of 1.13889 * fontsize;\n // KaTeX shows a kern of 1.171 * fontsize.\n if (sizeValue.unit === \"ex\") {\n scale = unitOptions.fontMetrics().xHeight;\n } else if (sizeValue.unit === \"em\") {\n scale = unitOptions.fontMetrics().quad;\n } else {\n throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n }\n if (unitOptions !== options) {\n scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */ var makeEm = function makeEm(n) {\n return +n.toFixed(4) + \"em\";\n};\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */ /**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */ var createClass = function createClass(classes) {\n return classes.filter((cls)=>cls).join(\" \");\n};\nvar initNode = function initNode(classes, options, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = style || {};\n if (options) {\n if (options.style.isTight()) {\n this.classes.push(\"mtight\");\n }\n var color = options.getColor();\n if (color) {\n this.style.color = color;\n }\n }\n};\n/**\n * Convert into an HTML node\n */ var toNode = function toNode(tagName) {\n var node = document.createElement(tagName); // Apply the class\n node.className = createClass(this.classes); // Apply inline styles\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe Flow doesn't seem to understand span.style's type.\n node.style[style] = this.style[style];\n }\n } // Apply attributes\n for(var attr in this.attributes){\n if (this.attributes.hasOwnProperty(attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n } // Append the children, also as HTML nodes\n for(var i = 0; i < this.children.length; i++){\n node.appendChild(this.children[i].toNode());\n }\n return node;\n};\n/**\n * Convert into an HTML markup string\n */ var toMarkup = function toMarkup(tagName) {\n var markup = \"<\" + tagName; // Add the class\n if (this.classes.length) {\n markup += ' class=\"' + utils.escape(createClass(this.classes)) + '\"';\n }\n var styles = \"\"; // Add the styles, after hyphenation\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n if (styles) {\n markup += ' style=\"' + utils.escape(styles) + '\"';\n } // Add the attributes\n for(var attr in this.attributes){\n if (this.attributes.hasOwnProperty(attr)) {\n markup += \" \" + attr + '=\"' + utils.escape(this.attributes[attr]) + '\"';\n }\n }\n markup += \">\"; // Add the markup of the children, also as markup\n for(var i = 0; i < this.children.length; i++){\n markup += this.children[i].toMarkup();\n }\n markup += \"</\" + tagName + \">\";\n return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */ class Span {\n constructor(classes, children, options, style){\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options, style);\n this.children = children || [];\n }\n /**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n * all browsers support attributes the same, and having too many custom\n * attributes is probably bad.\n */ setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n toNode() {\n return toNode.call(this, \"span\");\n }\n toMarkup() {\n return toMarkup.call(this, \"span\");\n }\n}\n/**\n * This node represents an anchor (<a>) element with a hyperlink. See `span`\n * for further details.\n */ class Anchor {\n constructor(href, classes, children, options){\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options);\n this.children = children || [];\n this.setAttribute(\"href\", href);\n }\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n toNode() {\n return toNode.call(this, \"a\");\n }\n toMarkup() {\n return toMarkup.call(this, \"a\");\n }\n}\n/**\n * This node represents an image embed (<img>) element.\n */ class Img {\n constructor(src, alt, style){\n this.src = void 0;\n this.alt = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.alt = alt;\n this.src = src;\n this.classes = [\n \"mord\"\n ];\n this.style = style;\n }\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n toNode() {\n var node = document.createElement(\"img\");\n node.src = this.src;\n node.alt = this.alt;\n node.className = \"mord\"; // Apply inline styles\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe\n node.style[style] = this.style[style];\n }\n }\n return node;\n }\n toMarkup() {\n var markup = \"<img src='\" + this.src + \" 'alt='\" + this.alt + \"' \"; // Add the styles, after hyphenation\n var styles = \"\";\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n if (styles) {\n markup += ' style=\"' + utils.escape(styles) + '\"';\n }\n markup += \"'/>\";\n return markup;\n }\n}\nvar iCombinations = {\n \"\\xee\": \"ı̂\",\n \"\\xef\": \"ı̈\",\n \"\\xed\": \"ı́\",\n // 'ī': '\\u0131\\u0304', // enable when we add Extended Latin\n \"\\xec\": \"ı̀\"\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */ class SymbolNode {\n constructor(text, height, depth, italic, skew, width, classes, style){\n this.text = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.italic = void 0;\n this.skew = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.classes = void 0;\n this.style = void 0;\n this.text = text;\n this.height = height || 0;\n this.depth = depth || 0;\n this.italic = italic || 0;\n this.skew = skew || 0;\n this.width = width || 0;\n this.classes = classes || [];\n this.style = style || {};\n this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n // can specify which fonts to use. This allows us to render these\n // characters with a serif font in situations where the browser would\n // either default to a sans serif or render a placeholder character.\n // We use CSS class names like cjk_fallback, hangul_fallback and\n // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n // script names\n var script = scriptFromCodepoint(this.text.charCodeAt(0));\n if (script) {\n this.classes.push(script + \"_fallback\");\n }\n if (/[îïíì]/.test(this.text)) {\n // add ī when we add Extended Latin\n this.text = iCombinations[this.text];\n }\n }\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n /**\n * Creates a text node or span from a symbol node. Note that a span is only\n * created if it is needed.\n */ toNode() {\n var node = document.createTextNode(this.text);\n var span = null;\n if (this.italic > 0) {\n span = document.createElement(\"span\");\n span.style.marginRight = makeEm(this.italic);\n }\n if (this.classes.length > 0) {\n span = span || document.createElement(\"span\");\n span.className = createClass(this.classes);\n }\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n span.style[style] = this.style[style];\n }\n }\n if (span) {\n span.appendChild(node);\n return span;\n } else {\n return node;\n }\n }\n /**\n * Creates markup for a symbol node.\n */ toMarkup() {\n // TODO(alpert): More duplication than I'd like from\n // span.prototype.toMarkup and symbolNode.prototype.toNode...\n var needsSpan = false;\n var markup = \"<span\";\n if (this.classes.length) {\n needsSpan = true;\n markup += ' class=\"';\n markup += utils.escape(createClass(this.classes));\n markup += '\"';\n }\n var styles = \"\";\n if (this.italic > 0) {\n styles += \"margin-right:\" + this.italic + \"em;\";\n }\n for(var style in this.style){\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n if (styles) {\n needsSpan = true;\n markup += ' style=\"' + utils.escape(styles) + '\"';\n }\n var escaped = utils.escape(this.text);\n if (needsSpan) {\n markup += \">\";\n markup += escaped;\n markup += \"</span>\";\n return markup;\n } else {\n return escaped;\n }\n }\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */ class SvgNode {\n constructor(children, attributes){\n this.children = void 0;\n this.attributes = void 0;\n this.children = children || [];\n this.attributes = attributes || {};\n }\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n for(var i = 0; i < this.children.length; i++){\n node.appendChild(this.children[i].toNode());\n }\n return node;\n }\n toMarkup() {\n var markup = '<svg xmlns=\"http://www.w3.org/2000/svg\"'; // Apply attributes\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"='\" + this.attributes[attr] + \"'\";\n }\n }\n markup += \">\";\n for(var i = 0; i < this.children.length; i++){\n markup += this.children[i].toMarkup();\n }\n markup += \"</svg>\";\n return markup;\n }\n}\nclass PathNode {\n constructor(pathName, alternate){\n this.pathName = void 0;\n this.alternate = void 0;\n this.pathName = pathName;\n this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n }\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"path\");\n if (this.alternate) {\n node.setAttribute(\"d\", this.alternate);\n } else {\n node.setAttribute(\"d\", path[this.pathName]);\n }\n return node;\n }\n toMarkup() {\n if (this.alternate) {\n return \"<path d='\" + this.alternate + \"'/>\";\n } else {\n return \"<path d='\" + path[this.pathName] + \"'/>\";\n }\n }\n}\nclass LineNode {\n constructor(attributes){\n this.attributes = void 0;\n this.attributes = attributes || {};\n }\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n return node;\n }\n toMarkup() {\n var markup = \"<line\";\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"='\" + this.attributes[attr] + \"'\";\n }\n }\n markup += \"/>\";\n return markup;\n }\n}\nfunction assertSymbolDomNode(group) {\n if (group instanceof SymbolNode) {\n return group;\n } else {\n throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n }\n}\nfunction assertSpan(group) {\n if (group instanceof Span) {\n return group;\n } else {\n throw new Error(\"Expected span<HtmlDomNode> but got \" + String(group) + \".\");\n }\n}\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n \"textord\", \"mathord\", etc).\n See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */ // Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n \"bin\": 1,\n \"close\": 1,\n \"inner\": 1,\n \"open\": 1,\n \"punct\": 1,\n \"rel\": 1\n};\nvar NON_ATOMS = {\n \"accent-token\": 1,\n \"mathord\": 1,\n \"op-token\": 1,\n \"spacing\": 1,\n \"textord\": 1\n};\nvar symbols = {\n \"math\": {},\n \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = {\n font,\n group,\n replace\n };\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\nvar math = \"math\";\nvar text = \"text\"; // fonts:\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\ndefineSymbol(math, main, rel, \"≡\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"≺\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"≻\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"∼\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"⊥\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"⪯\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"⪰\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"≃\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"∣\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"≪\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"≫\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"≍\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"∥\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"⋈\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"⌣\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"⊑\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"⊒\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"≐\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"⌢\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"∋\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"∝\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"⊢\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"⊣\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"∋\", \"\\\\owns\"); // Punctuation\ndefineSymbol(math, main, punct, \".\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"⋅\", \"\\\\cdotp\"); // Misc Symbols\ndefineSymbol(math, main, textord, \"#\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"#\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"&\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"&\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"ℵ\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"∀\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"ℏ\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"∃\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"∇\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"♭\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"ℓ\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"♮\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"♣\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"℘\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"♯\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"♢\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"ℜ\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"♡\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"ℑ\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"♠\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\xa7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\xa7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\xb6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\xb6\", \"\\\\P\"); // Math and Text\ndefineSymbol(math, main, textord, \"†\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"†\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"†\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"‡\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"‡\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"‡\", \"\\\\textdaggerdbl\"); // Large Delimiters\ndefineSymbol(math, main, close, \"⎱\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"⎰\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"⟯\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"⟮\", \"\\\\lgroup\", true); // Binary Operators\ndefineSymbol(math, main, bin, \"∓\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"⊖\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"⊎\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"⊓\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"∗\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"⊔\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"◯\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"∙\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"‡\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"≀\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"⨿\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"&\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\ndefineSymbol(math, main, rel, \"⟵\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"⇐\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"⟸\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"⟶\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"⇒\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"⟹\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"↔\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⟷\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⇔\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"⟺\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"↦\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"⟼\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"↗\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"↩\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"↪\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"↘\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"↼\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"⇀\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"↙\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"↽\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"⇁\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"↖\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"⇌\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\ndefineSymbol(math, ams, rel, \"≮\", \"\\\\nless\", true); // Symbol names preceeded by \"@\" each have a corresponding macro.\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"⪇\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"≨\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"⋦\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"⪉\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"⊀\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⋠\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"⋨\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"⪹\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"≁\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"∤\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"⊬\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"⊭\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"⋪\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"⋬\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"⊊\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"⫋\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"≯\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"⪈\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"≩\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"⋧\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"⪊\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"⊁\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⋡\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"⋩\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"⪺\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"≆\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"∦\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"⊯\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"⋫\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"⋭\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"⊋\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"⫌\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"⊮\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"⪵\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"⪶\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"⊴\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"⊵\", \"\\\\unrhd\"); // AMS Negated Arrows\ndefineSymbol(math, ams, rel, \"↚\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↛\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"⇍\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"⇏\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"↮\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"⇎\", \"\\\\nLeftrightarrow\", true); // AMS Misc\ndefineSymbol(math, ams, rel, \"△\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"ℏ\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"▽\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"◊\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"Ⓢ\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\xae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\xae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"∡\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"∄\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"℧\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"Ⅎ\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"⅁\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"‵\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"▲\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"▼\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"■\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"⧫\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"★\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"∢\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"∁\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\ndefineSymbol(math, ams, textord, \"\\xf0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\xf0\", \"\\xf0\");\ndefineSymbol(math, ams, textord, \"╱\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"╲\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"□\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"□\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"◊\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\ndefineSymbol(math, ams, textord, \"\\xa5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\xa5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"✓\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"✓\", \"\\\\checkmark\"); // AMS Hebrew\ndefineSymbol(math, ams, textord, \"ℶ\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"ℸ\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"ℷ\", \"\\\\gimel\", true); // AMS Greek\ndefineSymbol(math, ams, textord, \"ϝ\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"ϰ\", \"\\\\varkappa\"); // AMS Delimiters\ndefineSymbol(math, ams, open, \"┌\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"┐\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"└\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"┘\", \"\\\\@lrcorner\", true); // AMS Binary Relations\ndefineSymbol(math, ams, rel, \"≦\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"⩽\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"⪕\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"≲\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"⪅\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"≊\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"⋖\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"⋘\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"≶\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"⋚\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"⪋\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"≑\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"≓\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"≒\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"∽\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"⋍\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"⫅\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"⋐\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"⊏\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"≼\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"⋞\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"≾\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"⪷\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"⊲\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"⊴\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"⊨\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"⊪\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"⌣\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"⌢\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"≏\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"≎\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"≧\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"⩾\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"⪖\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"≳\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"⪆\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"⋗\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"⋙\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"≷\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"⋛\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"⪌\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"≖\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"≗\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"≜\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"∼\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"≈\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"⫆\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"⋑\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"⊐\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"≽\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"⋟\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"≿\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"⪸\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"⊳\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"⊵\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"⊩\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"∣\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"∥\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"≬\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"⋔\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"∝\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"◀\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"∴\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"∍\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"▶\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\ndefineSymbol(math, ams, rel, \"∵\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"⋘\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"⋙\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"⊲\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"⊳\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"≂\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"⋈\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"≑\", \"\\\\Doteq\", true); // AMS Binary Operators\ndefineSymbol(math, ams, bin, \"∔\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"∖\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"⋒\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"⋓\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"⩞\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"⊟\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"⊞\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"⋇\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"⋉\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"⋊\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"⋋\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"⋌\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"⋏\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"⋎\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"⊝\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"⊛\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"⋅\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"⊺\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"⋒\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"⋓\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"⊠\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\ndefineSymbol(math, ams, rel, \"⇢\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"⇠\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"⇇\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"⇆\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"⇚\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↞\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"↢\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"↫\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"⇋\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"↶\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"↺\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"↰\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"⇈\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"↿\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"⇃\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"⊶\", \"\\\\origof\", true); // not in font\ndefineSymbol(math, main, rel, \"⊷\", \"\\\\imageof\", true); // not in font\ndefineSymbol(math, ams, rel, \"⊸\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"↭\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"⇉\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"⇄\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"↠\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"↣\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"↬\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"↷\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\ndefineSymbol(math, ams, rel, \"↻\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"↱\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"⇊\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"↾\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"⇂\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"⇝\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"⇝\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"⇛\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"↾\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"‘\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"∠\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"∞\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"′\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"△\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"Γ\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"Δ\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"Θ\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"Λ\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"Ξ\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"Π\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"Σ\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"Υ\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"Φ\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"Ψ\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"Ω\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"Α\");\ndefineSymbol(math, main, textord, \"B\", \"Β\");\ndefineSymbol(math, main, textord, \"E\", \"Ε\");\ndefineSymbol(math, main, textord, \"Z\", \"Ζ\");\ndefineSymbol(math, main, textord, \"H\", \"Η\");\ndefineSymbol(math, main, textord, \"I\", \"Ι\");\ndefineSymbol(math, main, textord, \"K\", \"Κ\");\ndefineSymbol(math, main, textord, \"M\", \"Μ\");\ndefineSymbol(math, main, textord, \"N\", \"Ν\");\ndefineSymbol(math, main, textord, \"O\", \"Ο\");\ndefineSymbol(math, main, textord, \"P\", \"Ρ\");\ndefineSymbol(math, main, textord, \"T\", \"Τ\");\ndefineSymbol(math, main, textord, \"X\", \"Χ\");\ndefineSymbol(math, main, textord, \"\\xac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\xac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"⊤\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"⊥\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"∅\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"∅\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"α\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"β\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"γ\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"δ\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"ϵ\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"ζ\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"η\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"θ\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"ι\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"κ\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"λ\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"μ\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"ν\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"ξ\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"ο\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"π\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"ρ\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"σ\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"τ\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"υ\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"ϕ\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"χ\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"ψ\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"ω\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"ε\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"ϑ\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"ϖ\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"ϱ\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"ς\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"φ\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"∗\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"−\", \"-\", true);\ndefineSymbol(math, main, bin, \"⋅\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"∘\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\xf7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\xb1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\xd7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"∩\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"∪\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"∖\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"∧\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"∨\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"∧\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"∨\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"√\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"⟨\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"∣\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"∥\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"⟩\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"∣\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"∥\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"≈\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"≅\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"≥\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"≥\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"←\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"∈\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"⊂\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"⊃\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"⊆\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"⊇\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"⊈\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"⊉\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"⊨\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"←\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"≤\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"≤\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"→\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"→\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"≱\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"≰\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\ndefineSymbol(math, main, spacing, \"\\xa0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\xa0\", \" \");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\xa0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"⊼\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"⊻\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"⊙\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"⊕\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"⊗\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"∂\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"⊘\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"⊚\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"⊡\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"△\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"▽\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"†\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"⋄\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"⋆\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"◃\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"▹\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\ndefineSymbol(math, main, open, \"⌊\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"⌋\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"⌈\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"⌉\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"∣\", \"|\");\ndefineSymbol(math, main, textord, \"∣\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\ndefineSymbol(math, main, textord, \"∥\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"∥\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"∥\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"↑\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"⇑\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"↓\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"⇓\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"↕\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"⇕\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"∐\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"⋁\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"⋀\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"⨄\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"⋂\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"⋃\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\int\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"∬\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"∭\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"∏\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"∑\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"⨂\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"⨁\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"⨀\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"∮\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"∯\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"∰\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"⨆\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"∫\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"…\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"…\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"…\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"…\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"⋯\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"⋱\", \"\\\\ddots\", true);\ndefineSymbol(math, main, textord, \"⋮\", \"\\\\varvdots\"); // \\vdots is a macro\ndefineSymbol(math, main, accent, \"ˊ\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"ˋ\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\xa8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"~\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"ˉ\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"˘\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"ˇ\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"^\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"⃗\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"˙\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"˚\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\ndefineSymbol(math, main, mathord, \"\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"ı\", \"ı\");\ndefineSymbol(math, main, textord, \"ȷ\", \"ȷ\");\ndefineSymbol(text, main, textord, \"ı\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"ȷ\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\xdf\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\xe6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"œ\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\xf8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\xc6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"Œ\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\xd8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"ˊ\", \"\\\\'\"); // acute\ndefineSymbol(text, main, accent, \"ˋ\", \"\\\\`\"); // grave\ndefineSymbol(text, main, accent, \"ˆ\", \"\\\\^\"); // circumflex\ndefineSymbol(text, main, accent, \"˜\", \"\\\\~\"); // tilde\ndefineSymbol(text, main, accent, \"ˉ\", \"\\\\=\"); // macron\ndefineSymbol(text, main, accent, \"˘\", \"\\\\u\"); // breve\ndefineSymbol(text, main, accent, \"˙\", \"\\\\.\"); // dot above\ndefineSymbol(text, main, accent, \"\\xb8\", \"\\\\c\"); // cedilla\ndefineSymbol(text, main, accent, \"˚\", \"\\\\r\"); // ring above\ndefineSymbol(text, main, accent, \"ˇ\", \"\\\\v\"); // caron\ndefineSymbol(text, main, accent, \"\\xa8\", '\\\\\"'); // diaresis\ndefineSymbol(text, main, accent, \"˝\", \"\\\\H\"); // double acute\ndefineSymbol(text, main, accent, \"◯\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\nvar ligatures = {\n \"--\": true,\n \"---\": true,\n \"``\": true,\n \"''\": true\n};\ndefineSymbol(text, main, textord, \"–\", \"--\", true);\ndefineSymbol(text, main, textord, \"–\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"—\", \"---\", true);\ndefineSymbol(text, main, textord, \"—\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"‘\", \"`\", true);\ndefineSymbol(text, main, textord, \"‘\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"’\", \"'\", true);\ndefineSymbol(text, main, textord, \"’\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"“\", \"``\", true);\ndefineSymbol(text, main, textord, \"“\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"”\", \"''\", true);\ndefineSymbol(text, main, textord, \"”\", \"\\\\textquotedblright\"); // \\degree from gensymb package\ndefineSymbol(math, main, textord, \"\\xb0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\xb0\", \"\\\\degree\"); // \\textdegree from inputenc package\ndefineSymbol(text, main, textord, \"\\xb0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\ndefineSymbol(math, main, textord, \"\\xa3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\xa3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\xa3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\xa3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"✠\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"✠\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\nvar mathTextSymbols = '0123456789/@.\"';\nfor(var i = 0; i < mathTextSymbols.length; i++){\n var ch = mathTextSymbols.charAt(i);\n defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\nvar textSymbols = '0123456789!@*()-=+\";:?/.,';\nfor(var _i = 0; _i < textSymbols.length; _i++){\n var _ch = textSymbols.charAt(_i);\n defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\nfor(var _i2 = 0; _i2 < letters.length; _i2++){\n var _ch2 = letters.charAt(_i2);\n defineSymbol(math, main, mathord, _ch2, _ch2);\n defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\ndefineSymbol(math, ams, textord, \"C\", \"ℂ\"); // blackboard bold\ndefineSymbol(text, ams, textord, \"C\", \"ℂ\");\ndefineSymbol(math, ams, textord, \"H\", \"ℍ\");\ndefineSymbol(text, ams, textord, \"H\", \"ℍ\");\ndefineSymbol(math, ams, textord, \"N\", \"ℕ\");\ndefineSymbol(text, ams, textord, \"N\", \"ℕ\");\ndefineSymbol(math, ams, textord, \"P\", \"ℙ\");\ndefineSymbol(text, ams, textord, \"P\", \"ℙ\");\ndefineSymbol(math, ams, textord, \"Q\", \"ℚ\");\ndefineSymbol(text, ams, textord, \"Q\", \"ℚ\");\ndefineSymbol(math, ams, textord, \"R\", \"ℝ\");\ndefineSymbol(text, ams, textord, \"R\", \"ℝ\");\ndefineSymbol(math, ams, textord, \"Z\", \"ℤ\");\ndefineSymbol(text, ams, textord, \"Z\", \"ℤ\");\ndefineSymbol(math, main, mathord, \"h\", \"ℎ\"); // italic h, Planck constant\ndefineSymbol(text, main, mathord, \"h\", \"ℎ\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\nvar wideChar = \"\";\nfor(var _i3 = 0; _i3 < letters.length; _i3++){\n var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fractur\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n if (_i3 < 26) {\n // KaTeX fonts have only capital letters for blackboard bold and script.\n // See exception for k below.\n wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n } // TODO: Add bold script when it is supported by a KaTeX font.\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\nfor(var _i4 = 0; _i4 < 10; _i4++){\n var _ch4 = _i4.toString();\n wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\nvar extraLatin = \"\\xd0\\xde\\xfe\";\nfor(var _i5 = 0; _i5 < extraLatin.length; _i5++){\n var _ch5 = extraLatin.charAt(_i5);\n defineSymbol(math, main, mathord, _ch5, _ch5);\n defineSymbol(text, main, textord, _ch5, _ch5);\n}\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */ /**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n * * The CSS class of that group when in math mode.\n * * The CSS class of that group when in text mode.\n * * The font name, so that KaTeX can get font metrics.\n */ var wideLatinLetterData = [\n [\n \"mathbf\",\n \"textbf\",\n \"Main-Bold\"\n ],\n [\n \"mathbf\",\n \"textbf\",\n \"Main-Bold\"\n ],\n [\n \"mathnormal\",\n \"textit\",\n \"Math-Italic\"\n ],\n [\n \"mathnormal\",\n \"textit\",\n \"Math-Italic\"\n ],\n [\n \"boldsymbol\",\n \"boldsymbol\",\n \"Main-BoldItalic\"\n ],\n [\n \"boldsymbol\",\n \"boldsymbol\",\n \"Main-BoldItalic\"\n ],\n // Map fancy A-Z letters to script, not calligraphic.\n // This aligns with unicode-math and math fonts (except Cambria Math).\n [\n \"mathscr\",\n \"textscr\",\n \"Script-Regular\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"mathfrak\",\n \"textfrak\",\n \"Fraktur-Regular\"\n ],\n [\n \"mathfrak\",\n \"textfrak\",\n \"Fraktur-Regular\"\n ],\n [\n \"mathbb\",\n \"textbb\",\n \"AMS-Regular\"\n ],\n [\n \"mathbb\",\n \"textbb\",\n \"AMS-Regular\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"mathsf\",\n \"textsf\",\n \"SansSerif-Regular\"\n ],\n [\n \"mathsf\",\n \"textsf\",\n \"SansSerif-Regular\"\n ],\n [\n \"mathboldsf\",\n \"textboldsf\",\n \"SansSerif-Bold\"\n ],\n [\n \"mathboldsf\",\n \"textboldsf\",\n \"SansSerif-Bold\"\n ],\n [\n \"mathitsf\",\n \"textitsf\",\n \"SansSerif-Italic\"\n ],\n [\n \"mathitsf\",\n \"textitsf\",\n \"SansSerif-Italic\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"mathtt\",\n \"texttt\",\n \"Typewriter-Regular\"\n ],\n [\n \"mathtt\",\n \"texttt\",\n \"Typewriter-Regular\"\n ] // a-z monospace\n];\nvar wideNumeralData = [\n [\n \"mathbf\",\n \"textbf\",\n \"Main-Bold\"\n ],\n [\n \"\",\n \"\",\n \"\"\n ],\n [\n \"mathsf\",\n \"textsf\",\n \"SansSerif-Regular\"\n ],\n [\n \"mathboldsf\",\n \"textboldsf\",\n \"SansSerif-Bold\"\n ],\n [\n \"mathtt\",\n \"texttt\",\n \"Typewriter-Regular\"\n ] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n // IE doesn't support codePointAt(). So work with the surrogate pair.\n var H = wideChar.charCodeAt(0); // high surrogate\n var L = wideChar.charCodeAt(1); // low surrogate\n var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n // wideLatinLetterData contains exactly 26 chars on each row.\n // So we can calculate the relevant row. No traverse necessary.\n var i = Math.floor((codePoint - 0x1D400) / 26);\n return [\n wideLatinLetterData[i][2],\n wideLatinLetterData[i][j]\n ];\n } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n // Numerals, ten per row.\n var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n return [\n wideNumeralData[_i][2],\n wideNumeralData[_i][j]\n ];\n } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n // dotless i or j\n return [\n wideLatinLetterData[0][2],\n wideLatinLetterData[0][j]\n ];\n } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n // Greek letters. Not supported, yet.\n return [\n \"\",\n \"\"\n ];\n } else {\n // We don't support any wide characters outside 1D400–1D7FF.\n throw new ParseError(\"Unsupported character: \" + wideChar);\n }\n};\n/* eslint no-console:0 */ /**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */ var lookupSymbol = function lookupSymbol(value, fontName, mode) {\n // Replace the value with its replaced value from symbol.js\n if (symbols[mode][value] && symbols[mode][value].replace) {\n value = symbols[mode][value].replace;\n }\n return {\n value: value,\n metrics: getCharacterMetrics(value, fontName, mode)\n };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */ var makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n var lookup = lookupSymbol(value, fontName, mode);\n var metrics = lookup.metrics;\n value = lookup.value;\n var symbolNode;\n if (metrics) {\n var italic = metrics.italic;\n if (mode === \"text\" || options && options.font === \"mathit\") {\n italic = 0;\n }\n symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n } else {\n // TODO(emily): Figure out a good way to only print this in development\n typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n }\n if (options) {\n symbolNode.maxFontSize = options.sizeMultiplier;\n if (options.style.isTight()) {\n symbolNode.classes.push(\"mtight\");\n }\n var color = options.getColor();\n if (color) {\n symbolNode.style.color = color;\n }\n }\n return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */ var mathsym = function mathsym(value, mode, options, classes) {\n if (classes === void 0) {\n classes = [];\n }\n // Decide what font to render the symbol in by its entry in the symbols\n // table.\n // Have a special case for when the value = \\ because the \\ is used as a\n // textord in unsupported command errors but cannot be parsed as a regular\n // text ordinal and is therefore not present as a symbol in the symbols\n // table for text, as well as a special case for boldsymbol because it\n // can be used for bold + and -\n if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\n \"mathbf\"\n ]));\n } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n } else {\n return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\n \"amsrm\"\n ]));\n }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol. Use this function instead of fontMap for font\n * \"boldsymbol\".\n */ var boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n return {\n fontName: \"Math-BoldItalic\",\n fontClass: \"boldsymbol\"\n };\n } else {\n // Some glyphs do not exist in Math-BoldItalic so we need to use\n // Main-Bold instead.\n return {\n fontName: \"Main-Bold\",\n fontClass: \"mathbf\"\n };\n }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */ var makeOrd = function makeOrd(group, options, type) {\n var mode = group.mode;\n var text = group.text;\n var classes = [\n \"mord\"\n ]; // Math mode or Old font (i.e. \\rm)\n var isFont = mode === \"math\" || mode === \"text\" && options.font;\n var fontOrFamily = isFont ? options.font : options.fontFamily;\n if (text.charCodeAt(0) === 0xD835) {\n // surrogate pairs get special treatment\n var [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n } else if (fontOrFamily) {\n var fontName;\n var fontClasses;\n if (fontOrFamily === \"boldsymbol\") {\n var fontData = boldsymbol(text, mode, options, classes, type);\n fontName = fontData.fontName;\n fontClasses = [\n fontData.fontClass\n ];\n } else if (isFont) {\n fontName = fontMap[fontOrFamily].fontName;\n fontClasses = [\n fontOrFamily\n ];\n } else {\n fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n fontClasses = [\n fontOrFamily,\n options.fontWeight,\n options.fontShape\n ];\n }\n if (lookupSymbol(text, fontName, mode).metrics) {\n return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n var parts = [];\n for(var i = 0; i < text.length; i++){\n parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n }\n return makeFragment(parts);\n }\n } // Makes a symbol in the default font for mathords and textords.\n if (type === \"mathord\") {\n return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\n \"mathnormal\"\n ]));\n } else if (type === \"textord\") {\n var font = symbols[mode][text] && symbols[mode][text].font;\n if (font === \"ams\") {\n var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n } else if (font === \"main\" || !font) {\n var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n } else {\n // fonts added by plugins\n var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n }\n } else {\n throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */ var canCombine = (prev, next)=>{\n if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n return false;\n } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n // so that the proper spacing can be preserved.\n if (prev.classes.length === 1) {\n var cls = prev.classes[0];\n if (cls === \"mbin\" || cls === \"mord\") {\n return false;\n }\n }\n for(var style in prev.style){\n if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n for(var _style in next.style){\n if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n return false;\n }\n }\n return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */ var tryCombineChars = (chars)=>{\n for(var i = 0; i < chars.length - 1; i++){\n var prev = chars[i];\n var next = chars[i + 1];\n if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n prev.text += next.text;\n prev.height = Math.max(prev.height, next.height);\n prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n // it to add padding to the right of the span created from\n // the combined characters.\n prev.italic = next.italic;\n chars.splice(i + 1, 1);\n i--;\n }\n }\n return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */ var sizeElementFromChildren = function sizeElementFromChildren(elem) {\n var height = 0;\n var depth = 0;\n var maxFontSize = 0;\n for(var i = 0; i < elem.children.length; i++){\n var child = elem.children[i];\n if (child.height > height) {\n height = child.height;\n }\n if (child.depth > depth) {\n depth = child.depth;\n }\n if (child.maxFontSize > maxFontSize) {\n maxFontSize = child.maxFontSize;\n }\n }\n elem.height = height;\n elem.depth = depth;\n elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */ var makeSpan$2 = function makeSpan(classes, children, options, style) {\n var span = new Span(classes, children, options, style);\n sizeElementFromChildren(span);\n return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\nvar makeSvgSpan = (classes, children, options, style)=>new Span(classes, children, options, style);\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n var line = makeSpan$2([\n className\n ], [], options);\n line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n line.style.borderBottomWidth = makeEm(line.height);\n line.maxFontSize = 1.0;\n return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */ var makeAnchor = function makeAnchor(href, classes, children, options) {\n var anchor = new Anchor(href, classes, children, options);\n sizeElementFromChildren(anchor);\n return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */ var makeFragment = function makeFragment(children) {\n var fragment = new DocumentFragment(children);\n sizeElementFromChildren(fragment);\n return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */ var wrapFragment = function wrapFragment(group, options) {\n if (group instanceof DocumentFragment) {\n return makeSpan$2([], [\n group\n ], options);\n }\n return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n if (params.positionType === \"individualShift\") {\n var oldChildren = params.children;\n var children = [\n oldChildren[0]\n ]; // Add in kerns to the list of params.children to get each element to be\n // shifted to the correct specified shift\n var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n var currPos = _depth;\n for(var i = 1; i < oldChildren.length; i++){\n var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n currPos = currPos + diff;\n children.push({\n type: \"kern\",\n size\n });\n children.push(oldChildren[i]);\n }\n return {\n children,\n depth: _depth\n };\n }\n var depth;\n if (params.positionType === \"top\") {\n // We always start at the bottom, so calculate the bottom by adding up\n // all the sizes\n var bottom = params.positionData;\n for(var _i = 0; _i < params.children.length; _i++){\n var child = params.children[_i];\n bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n }\n depth = bottom;\n } else if (params.positionType === \"bottom\") {\n depth = -params.positionData;\n } else {\n var firstChild = params.children[0];\n if (firstChild.type !== \"elem\") {\n throw new Error('First child must have type \"elem\".');\n }\n if (params.positionType === \"shift\") {\n depth = -firstChild.elem.depth - params.positionData;\n } else if (params.positionType === \"firstBaseline\") {\n depth = -firstChild.elem.depth;\n } else {\n throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n }\n }\n return {\n children: params.children,\n depth\n };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */ var makeVList = function makeVList(params, options) {\n var { children, depth } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n // each item, where it will determine the item's baseline. Since it has\n // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n // top edge and the strut's bottom edge will sit on the item's baseline,\n // with no additional line-height spacing. This allows the item baseline to\n // be positioned precisely without worrying about font ascent and\n // line-height.\n var pstrutSize = 0;\n for(var i = 0; i < children.length; i++){\n var child = children[i];\n if (child.type === \"elem\") {\n var elem = child.elem;\n pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n }\n }\n pstrutSize += 2;\n var pstrut = makeSpan$2([\n \"pstrut\"\n ], []);\n pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n var realChildren = [];\n var minPos = depth;\n var maxPos = depth;\n var currPos = depth;\n for(var _i2 = 0; _i2 < children.length; _i2++){\n var _child = children[_i2];\n if (_child.type === \"kern\") {\n currPos += _child.size;\n } else {\n var _elem = _child.elem;\n var classes = _child.wrapperClasses || [];\n var style = _child.wrapperStyle || {};\n var childWrap = makeSpan$2(classes, [\n pstrut,\n _elem\n ], undefined, style);\n childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n if (_child.marginLeft) {\n childWrap.style.marginLeft = _child.marginLeft;\n }\n if (_child.marginRight) {\n childWrap.style.marginRight = _child.marginRight;\n }\n realChildren.push(childWrap);\n currPos += _elem.height + _elem.depth;\n }\n minPos = Math.min(minPos, currPos);\n maxPos = Math.max(maxPos, currPos);\n } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n // This cell's bottom edge will determine the containing table's baseline\n // without overly expanding the containing line-box.\n var vlist = makeSpan$2([\n \"vlist\"\n ], realChildren);\n vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n var rows;\n if (minPos < 0) {\n // We will define depth in an empty span with display: table-cell.\n // It should render with the height that we define. But Chrome, in\n // contenteditable mode only, treats that span as if it contains some\n // text content. And that min-height over-rides our desired height.\n // So we put another empty span inside the depth strut span.\n var emptySpan = makeSpan$2([], []);\n var depthStrut = makeSpan$2([\n \"vlist\"\n ], [\n emptySpan\n ]);\n depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n // puts the bottom of the *second* row on the baseline.\n var topStrut = makeSpan$2([\n \"vlist-s\"\n ], [\n new SymbolNode(\"\")\n ]);\n rows = [\n makeSpan$2([\n \"vlist-r\"\n ], [\n vlist,\n topStrut\n ]),\n makeSpan$2([\n \"vlist-r\"\n ], [\n depthStrut\n ])\n ];\n } else {\n rows = [\n makeSpan$2([\n \"vlist-r\"\n ], [\n vlist\n ])\n ];\n }\n var vtable = makeSpan$2([\n \"vlist-t\"\n ], rows);\n if (rows.length === 2) {\n vtable.classes.push(\"vlist-t2\");\n }\n vtable.height = maxPos;\n vtable.depth = -minPos;\n return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\nvar makeGlue = (measurement, options)=>{\n // Make an empty span for the space\n var rule = makeSpan$2([\n \"mspace\"\n ], [], options);\n var size = calculateSize(measurement, options);\n rule.style.marginRight = makeEm(size);\n return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n var baseFontName = \"\";\n switch(fontFamily){\n case \"amsrm\":\n baseFontName = \"AMS\";\n break;\n case \"textrm\":\n baseFontName = \"Main\";\n break;\n case \"textsf\":\n baseFontName = \"SansSerif\";\n break;\n case \"texttt\":\n baseFontName = \"Typewriter\";\n break;\n default:\n baseFontName = fontFamily;\n }\n var fontStylesName;\n if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n fontStylesName = \"BoldItalic\";\n } else if (fontWeight === \"textbf\") {\n fontStylesName = \"Bold\";\n } else if (fontWeight === \"textit\") {\n fontStylesName = \"Italic\";\n } else {\n fontStylesName = \"Regular\";\n }\n return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */ // A map between tex font commands an MathML mathvariant attribute values\nvar fontMap = {\n // styles\n \"mathbf\": {\n variant: \"bold\",\n fontName: \"Main-Bold\"\n },\n \"mathrm\": {\n variant: \"normal\",\n fontName: \"Main-Regular\"\n },\n \"textit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathnormal\": {\n variant: \"italic\",\n fontName: \"Math-Italic\"\n },\n // \"boldsymbol\" is missing because they require the use of multiple fonts:\n // Math-BoldItalic and Main-Bold. This is handled by a special case in\n // makeOrd which ends up calling boldsymbol.\n // families\n \"mathbb\": {\n variant: \"double-struck\",\n fontName: \"AMS-Regular\"\n },\n \"mathcal\": {\n variant: \"script\",\n fontName: \"Caligraphic-Regular\"\n },\n \"mathfrak\": {\n variant: \"fraktur\",\n fontName: \"Fraktur-Regular\"\n },\n \"mathscr\": {\n variant: \"script\",\n fontName: \"Script-Regular\"\n },\n \"mathsf\": {\n variant: \"sans-serif\",\n fontName: \"SansSerif-Regular\"\n },\n \"mathtt\": {\n variant: \"monospace\",\n fontName: \"Typewriter-Regular\"\n }\n};\nvar svgData = {\n // path, width, height\n vec: [\n \"vec\",\n 0.471,\n 0.714\n ],\n // values from the font glyph\n oiintSize1: [\n \"oiintSize1\",\n 0.957,\n 0.499\n ],\n // oval to overlay the integrand\n oiintSize2: [\n \"oiintSize2\",\n 1.472,\n 0.659\n ],\n oiiintSize1: [\n \"oiiintSize1\",\n 1.304,\n 0.499\n ],\n oiiintSize2: [\n \"oiiintSize2\",\n 1.98,\n 0.659\n ]\n};\nvar staticSvg = function staticSvg(value, options) {\n // Create a span with inline SVG for the element.\n var [pathName, width, height] = svgData[value];\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([\n path\n ], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = makeSvgSpan([\n \"overlay\"\n ], [\n svgNode\n ], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return span;\n};\nvar buildCommon = {\n fontMap,\n makeSymbol,\n mathsym,\n makeSpan: makeSpan$2,\n makeSvgSpan,\n makeLineSpan,\n makeAnchor,\n makeFragment,\n wrapFragment,\n makeVList,\n makeOrd,\n makeGlue,\n staticSvg,\n svgData,\n tryCombineChars\n};\n/**\n * Describes spaces between different classes of atoms.\n */ var thinspace = {\n number: 3,\n unit: \"mu\"\n};\nvar mediumspace = {\n number: 4,\n unit: \"mu\"\n};\nvar thickspace = {\n number: 5,\n unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// Spacing relationships for display and text styles\nvar spacings = {\n mord: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n minner: thinspace\n },\n mbin: {\n mord: mediumspace,\n mop: mediumspace,\n mopen: mediumspace,\n minner: mediumspace\n },\n mrel: {\n mord: thickspace,\n mop: thickspace,\n mopen: thickspace,\n minner: thickspace\n },\n mopen: {},\n mclose: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mpunct: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n mopen: thinspace,\n mclose: thinspace,\n mpunct: thinspace,\n minner: thinspace\n },\n minner: {\n mord: thinspace,\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n mopen: thinspace,\n mpunct: thinspace,\n minner: thinspace\n }\n}; // Spacing relationships for script and scriptscript styles\nvar tightSpacings = {\n mord: {\n mop: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace\n },\n mbin: {},\n mrel: {},\n mopen: {},\n mclose: {\n mop: thinspace\n },\n mpunct: {},\n minner: {\n mop: thinspace\n }\n};\n/** Context provided to function handlers for error messages. */ // Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */ /**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */ var _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */ var _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */ var _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n var { type, names, props, handler, htmlBuilder, mathmlBuilder } = _ref;\n // Set default values of functions\n var data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n for(var i = 0; i < names.length; ++i){\n _functions[names[i]] = data;\n }\n if (type) {\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */ function defineFunctionBuilders(_ref2) {\n var { type, htmlBuilder, mathmlBuilder } = _ref2;\n defineFunction({\n type,\n names: [],\n props: {\n numArgs: 0\n },\n handler () {\n throw new Error(\"Should never be called.\");\n },\n htmlBuilder,\n mathmlBuilder\n });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\nvar ordargument = function ordargument(arg) {\n return arg.type === \"ordgroup\" ? arg.body : [\n arg\n ];\n};\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */ var makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\nvar binLeftCanceller = [\n \"leftmost\",\n \"mbin\",\n \"mopen\",\n \"mrel\",\n \"mop\",\n \"mpunct\"\n];\nvar binRightCanceller = [\n \"rightmost\",\n \"mrel\",\n \"mclose\",\n \"mpunct\"\n];\nvar styleMap$1 = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n mord: \"mord\",\n mop: \"mop\",\n mbin: \"mbin\",\n mrel: \"mrel\",\n mopen: \"mopen\",\n mclose: \"mclose\",\n mpunct: \"mpunct\",\n minner: \"minner\"\n};\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */ var buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n if (surrounding === void 0) {\n surrounding = [\n null,\n null\n ];\n }\n // Parse expressions into `groups`.\n var groups = [];\n for(var i = 0; i < expression.length; i++){\n var output = buildGroup$1(expression[i], options);\n if (output instanceof DocumentFragment) {\n var children = output.children;\n groups.push(...children);\n } else {\n groups.push(output);\n }\n } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n // to avoid processing groups multiple times.\n if (!isRealGroup) {\n return groups;\n }\n var glueOptions = options;\n if (expression.length === 1) {\n var node = expression[0];\n if (node.type === \"sizing\") {\n glueOptions = options.havingSize(node.size);\n } else if (node.type === \"styling\") {\n glueOptions = options.havingStyle(styleMap$1[node.style]);\n }\n } // Dummy spans for determining spacings between surrounding atoms.\n // If `expression` has no atoms on the left or right, class \"leftmost\"\n // or \"rightmost\", respectively, is used to indicate it.\n var dummyPrev = makeSpan$1([\n surrounding[0] || \"leftmost\"\n ], [], options);\n var dummyNext = makeSpan$1([\n surrounding[1] || \"rightmost\"\n ], [], options); // TODO: These code assumes that a node's math class is the first element\n // of its `classes` array. A later cleanup should ensure this, for\n // instance by changing the signature of `makeSpan`.\n // Before determining what spaces to insert, perform bin cancellation.\n // Binary operators change to ordinary symbols in some contexts.\n var isRoot = isRealGroup === \"root\";\n traverseNonSpaceNodes(groups, (node, prev)=>{\n var prevType = prev.classes[0];\n var type = node.classes[0];\n if (prevType === \"mbin\" && utils.contains(binRightCanceller, type)) {\n prev.classes[0] = \"mord\";\n } else if (type === \"mbin\" && utils.contains(binLeftCanceller, prevType)) {\n node.classes[0] = \"mord\";\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n traverseNonSpaceNodes(groups, (node, prev)=>{\n var prevType = getTypeOfDomTree(prev);\n var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n if (space) {\n // Insert glue (spacing) after the `prev`.\n return buildCommon.makeGlue(space, glueOptions);\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n if (next) {\n // temporarily append the right node, if exists\n nodes.push(next);\n }\n var i = 0;\n for(; i < nodes.length; i++){\n var node = nodes[i];\n var partialGroup = checkPartialGroup(node);\n if (partialGroup) {\n // Recursive DFS\n // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n continue;\n } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n // spacing should go between atoms of different classes\n var nonspace = !node.hasClass(\"mspace\");\n if (nonspace) {\n var result = callback(node, prev.node);\n if (result) {\n if (prev.insertAfter) {\n prev.insertAfter(result);\n } else {\n // insert at front\n nodes.unshift(result);\n i++;\n }\n }\n }\n if (nonspace) {\n prev.node = node;\n } else if (isRoot && node.hasClass(\"newline\")) {\n prev.node = makeSpan$1([\n \"leftmost\"\n ]); // treat like beginning of line\n }\n prev.insertAfter = ((index)=>(n)=>{\n nodes.splice(index + 1, 0, n);\n i++;\n })(i);\n }\n if (next) {\n nodes.pop();\n }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\nvar checkPartialGroup = function checkPartialGroup(node) {\n if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n return node;\n }\n return null;\n}; // Return the outermost node of a domTree.\nvar getOutermostNode = function getOutermostNode(node, side) {\n var partialGroup = checkPartialGroup(node);\n if (partialGroup) {\n var children = partialGroup.children;\n if (children.length) {\n if (side === \"right\") {\n return getOutermostNode(children[children.length - 1], \"right\");\n } else if (side === \"left\") {\n return getOutermostNode(children[0], \"left\");\n }\n }\n }\n return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n if (!node) {\n return null;\n }\n if (side) {\n node = getOutermostNode(node, side);\n } // This makes a lot of assumptions as to where the type of atom\n // appears. We should do a better job of enforcing this.\n return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n var moreClasses = [\n \"nulldelimiter\"\n ].concat(options.baseSizingClasses());\n return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */ var buildGroup$1 = function buildGroup(group, options, baseOptions) {\n if (!group) {\n return makeSpan$1();\n }\n if (_htmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n // for that size difference.\n if (baseOptions && options.size !== baseOptions.size) {\n groupNode = makeSpan$1(options.sizingClasses(baseOptions), [\n groupNode\n ], options);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n groupNode.height *= multiplier;\n groupNode.depth *= multiplier;\n }\n return groupNode;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent. `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */ function buildHTMLUnbreakable(children, options) {\n // Compute height and depth of this chunk.\n var body = makeSpan$1([\n \"base\"\n ], children, options); // Add strut, which ensures that the top of the HTML element falls at\n // the height of the expression, and the bottom of the HTML element\n // falls at the depth of the expression.\n var strut = makeSpan$1([\n \"strut\"\n ]);\n strut.style.height = makeEm(body.height + body.depth);\n if (body.depth) {\n strut.style.verticalAlign = makeEm(-body.depth);\n }\n body.children.unshift(strut);\n return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */ function buildHTML(tree, options) {\n // Strip off outer tag wrapper for processing below.\n var tag = null;\n if (tree.length === 1 && tree[0].type === \"tag\") {\n tag = tree[0].tag;\n tree = tree[0].body;\n } // Build the expression contained in the tree\n var expression = buildExpression$1(tree, options, \"root\");\n var eqnNum;\n if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n // An environment with automatic equation numbers, e.g. {gather}.\n eqnNum = expression.pop();\n }\n var children = []; // Create one base node for each chunk between potential line breaks.\n // The TeXBook [p.173] says \"A formula will be broken only after a\n // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n // binary operation is on the ``outer level'' of the formula (i.e., not\n // enclosed in {...} and not part of an \\over construction).\"\n var parts = [];\n for(var i = 0; i < expression.length; i++){\n parts.push(expression[i]);\n if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n // Put any post-operator glue on same line as operator.\n // Watch for \\nobreak along the way, and stop at \\newline.\n var nobreak = false;\n while(i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")){\n i++;\n parts.push(expression[i]);\n if (expression[i].hasClass(\"nobreak\")) {\n nobreak = true;\n }\n } // Don't allow break if \\nobreak among the post-operator glue.\n if (!nobreak) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n }\n } else if (expression[i].hasClass(\"newline\")) {\n // Write the line except the newline\n parts.pop();\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n } // Put the newline at the top level\n children.push(expression[i]);\n }\n }\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n } // Now, if there was a tag, build it too and append it as a final child.\n var tagChild;\n if (tag) {\n tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n tagChild.classes = [\n \"tag\"\n ];\n children.push(tagChild);\n } else if (eqnNum) {\n children.push(eqnNum);\n }\n var htmlNode = makeSpan$1([\n \"katex-html\"\n ], children);\n htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n // (the height of the enclosing htmlNode) for proper vertical alignment.\n if (tagChild) {\n var strut = tagChild.children[0];\n strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n if (htmlNode.depth) {\n strut.style.verticalAlign = makeEm(-htmlNode.depth);\n }\n }\n return htmlNode;\n}\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */ function newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `<mo>` and `<mspace>` tags).\n */ class MathNode {\n constructor(type, children, classes){\n this.type = void 0;\n this.attributes = void 0;\n this.children = void 0;\n this.classes = void 0;\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n }\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */ setAttribute(name, value) {\n this.attributes[name] = value;\n }\n /**\n * Gets an attribute on a MathML node.\n */ getAttribute(name) {\n return this.attributes[name];\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */ toNode() {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n for(var i = 0; i < this.children.length; i++){\n node.appendChild(this.children[i].toNode());\n }\n return node;\n }\n /**\n * Converts the math node into an HTML markup string.\n */ toMarkup() {\n var markup = \"<\" + this.type; // Add the attributes\n for(var attr in this.attributes){\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + '=\"';\n markup += utils.escape(this.attributes[attr]);\n markup += '\"';\n }\n }\n if (this.classes.length > 0) {\n markup += ' class =\"' + utils.escape(createClass(this.classes)) + '\"';\n }\n markup += \">\";\n for(var i = 0; i < this.children.length; i++){\n markup += this.children[i].toMarkup();\n }\n markup += \"</\" + this.type + \">\";\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */ toText() {\n return this.children.map((child)=>child.toText()).join(\"\");\n }\n}\n/**\n * This node represents a piece of text.\n */ class TextNode {\n constructor(text){\n this.text = void 0;\n this.text = text;\n }\n /**\n * Converts the text node into a DOM text node.\n */ toNode() {\n return document.createTextNode(this.text);\n }\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */ toMarkup() {\n return utils.escape(this.toText());\n }\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */ toText() {\n return this.text;\n }\n}\n/**\n * This node represents a space, but may render as <mspace.../> or as text,\n * depending on the width.\n */ class SpaceNode {\n /**\n * Create a Space node with width given in CSS ems.\n */ constructor(width){\n this.width = void 0;\n this.character = void 0;\n this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n // for a table of space-like characters. We use Unicode\n // representations instead of &LongNames; as it's not clear how to\n // make the latter via document.createTextNode.\n if (width >= 0.05555 && width <= 0.05556) {\n this.character = \" \"; //  \n } else if (width >= 0.1666 && width <= 0.1667) {\n this.character = \" \"; //  \n } else if (width >= 0.2222 && width <= 0.2223) {\n this.character = \" \"; //  \n } else if (width >= 0.2777 && width <= 0.2778) {\n this.character = \" \"; //   \n } else if (width >= -0.05556 && width <= -0.05555) {\n this.character = \" \"; // ​\n } else if (width >= -0.1667 && width <= -0.1666) {\n this.character = \" \"; // ​\n } else if (width >= -0.2223 && width <= -0.2222) {\n this.character = \" \"; // ​\n } else if (width >= -0.2778 && width <= -0.2777) {\n this.character = \" \"; // ​\n } else {\n this.character = null;\n }\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */ toNode() {\n if (this.character) {\n return document.createTextNode(this.character);\n } else {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n node.setAttribute(\"width\", makeEm(this.width));\n return node;\n }\n }\n /**\n * Converts the math node into an HTML markup string.\n */ toMarkup() {\n if (this.character) {\n return \"<mtext>\" + this.character + \"</mtext>\";\n } else {\n return '<mspace width=\"' + makeEm(this.width) + '\"/>';\n }\n }\n /**\n * Converts the math node into a string, similar to innerText.\n */ toText() {\n if (this.character) {\n return this.character;\n } else {\n return \" \";\n }\n }\n}\nvar mathMLTree = {\n MathNode,\n TextNode,\n SpaceNode,\n newDocumentFragment\n};\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */ /**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */ var makeText = function makeText(text, mode, options) {\n if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n text = symbols[mode][text].replace;\n }\n return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an <mrow> node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */ var makeRow = function makeRow(body) {\n if (body.length === 1) {\n return body[0];\n } else {\n return new mathMLTree.MathNode(\"mrow\", body);\n }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */ var getVariant = function getVariant(group, options) {\n // Handle \\text... font specifiers as best we can.\n // MathML has a limited list of allowable mathvariant specifiers; see\n // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n if (options.fontFamily === \"texttt\") {\n return \"monospace\";\n } else if (options.fontFamily === \"textsf\") {\n if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"sans-serif-bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"sans-serif-italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold-sans-serif\";\n } else {\n return \"sans-serif\";\n }\n } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold\";\n }\n var font = options.font;\n if (!font || font === \"mathnormal\") {\n return null;\n }\n var mode = group.mode;\n if (font === \"mathit\") {\n return \"italic\";\n } else if (font === \"boldsymbol\") {\n return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n } else if (font === \"mathbf\") {\n return \"bold\";\n } else if (font === \"mathbb\") {\n return \"double-struck\";\n } else if (font === \"mathfrak\") {\n return \"fraktur\";\n } else if (font === \"mathscr\" || font === \"mathcal\") {\n // MathML makes no distinction between script and calligraphic\n return \"script\";\n } else if (font === \"mathsf\") {\n return \"sans-serif\";\n } else if (font === \"mathtt\") {\n return \"monospace\";\n }\n var text = group.text;\n if (utils.contains([\n \"\\\\imath\",\n \"\\\\jmath\"\n ], text)) {\n return null;\n }\n if (symbols[mode][text] && symbols[mode][text].replace) {\n text = symbols[mode][text].replace;\n }\n var fontName = buildCommon.fontMap[font].fontName;\n if (getCharacterMetrics(text, fontName, mode)) {\n return buildCommon.fontMap[font].variant;\n }\n return null;\n};\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also combine consecutive <mtext> outputs into a single\n * <mtext> tag.\n */ var buildExpression = function buildExpression(expression, options, isOrdgroup) {\n if (expression.length === 1) {\n var group = buildGroup(expression[0], options);\n if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute(\"lspace\", \"0em\");\n group.setAttribute(\"rspace\", \"0em\");\n }\n return [\n group\n ];\n }\n var groups = [];\n var lastGroup;\n for(var i = 0; i < expression.length; i++){\n var _group = buildGroup(expression[i], options);\n if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n // Concatenate adjacent <mtext>s\n if (_group.type === \"mtext\" && lastGroup.type === \"mtext\" && _group.getAttribute(\"mathvariant\") === lastGroup.getAttribute(\"mathvariant\")) {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate adjacent <mn>s\n } else if (_group.type === \"mn\" && lastGroup.type === \"mn\") {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>\n } else if (_group.type === \"mi\" && _group.children.length === 1 && lastGroup.type === \"mn\") {\n var child = _group.children[0];\n if (child instanceof TextNode && child.text === \".\") {\n lastGroup.children.push(..._group.children);\n continue;\n }\n } else if (lastGroup.type === \"mi\" && lastGroup.children.length === 1) {\n var lastChild = lastGroup.children[0];\n if (lastChild instanceof TextNode && lastChild.text === \"̸\" && (_group.type === \"mo\" || _group.type === \"mi\" || _group.type === \"mn\")) {\n var _child = _group.children[0];\n if (_child instanceof TextNode && _child.text.length > 0) {\n // Overlay with combining character long solidus\n _child.text = _child.text.slice(0, 1) + \"̸\" + _child.text.slice(1);\n groups.pop();\n }\n }\n }\n }\n groups.push(_group);\n lastGroup = _group;\n }\n return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an <mrow>\n * if there's more than one. Returns a single node instead of an array.\n */ var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */ var buildGroup = function buildGroup(group, options) {\n if (!group) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n return result;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * <semantics> tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `<math>` inside it so\n * we can do appropriate styling.\n */ function buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n // and add spacing nodes. This is necessary only adjacent to math operators\n // like \\sin or \\lim or to subsup elements that contain math operators.\n // MathML takes care of the other spacing issues.\n // Wrap up the expression in an mrow so it is presented in the semantics\n // tag correctly, unless it's a single <mrow> or <mtable>.\n var wrapper;\n if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains([\n \"mrow\",\n \"mtable\"\n ], expression[0].type)) {\n wrapper = expression[0];\n } else {\n wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n } // Build a TeX annotation of the source\n var annotation = new mathMLTree.MathNode(\"annotation\", [\n new mathMLTree.TextNode(texExpression)\n ]);\n annotation.setAttribute(\"encoding\", \"application/x-tex\");\n var semantics = new mathMLTree.MathNode(\"semantics\", [\n wrapper,\n annotation\n ]);\n var math = new mathMLTree.MathNode(\"math\", [\n semantics\n ]);\n math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n if (isDisplayMode) {\n math.setAttribute(\"display\", \"block\");\n } // You can't style <math> nodes, so we wrap the node in a span.\n // NOTE: The span class is not typed to have <math> nodes as children, and\n // we don't want to make the children type more generic since the children\n // of span are expected to have more fields in `buildHtml` contexts.\n var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n return buildCommon.makeSpan([\n wrapperClass\n ], [\n math\n ]);\n}\nvar optionsFromSettings = function optionsFromSettings(settings) {\n return new Options({\n style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n maxSize: settings.maxSize,\n minRuleThickness: settings.minRuleThickness\n });\n};\nvar displayWrap = function displayWrap(node, settings) {\n if (settings.displayMode) {\n var classes = [\n \"katex-display\"\n ];\n if (settings.leqno) {\n classes.push(\"leqno\");\n }\n if (settings.fleqn) {\n classes.push(\"fleqn\");\n }\n node = buildCommon.makeSpan(classes, [\n node\n ]);\n }\n return node;\n};\nvar buildTree = function buildTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var katexNode;\n if (settings.output === \"mathml\") {\n return buildMathML(tree, expression, options, settings.displayMode, true);\n } else if (settings.output === \"html\") {\n var htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan([\n \"katex\"\n ], [\n htmlNode\n ]);\n } else {\n var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n var _htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan([\n \"katex\"\n ], [\n mathMLNode,\n _htmlNode\n ]);\n }\n return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var htmlNode = buildHTML(tree, options);\n var katexNode = buildCommon.makeSpan([\n \"katex\"\n ], [\n htmlNode\n ]);\n return displayWrap(katexNode, settings);\n};\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */ var stretchyCodePoint = {\n widehat: \"^\",\n widecheck: \"ˇ\",\n widetilde: \"~\",\n utilde: \"~\",\n overleftarrow: \"←\",\n underleftarrow: \"←\",\n xleftarrow: \"←\",\n overrightarrow: \"→\",\n underrightarrow: \"→\",\n xrightarrow: \"→\",\n underbrace: \"⏟\",\n overbrace: \"⏞\",\n overgroup: \"⏠\",\n undergroup: \"⏡\",\n overleftrightarrow: \"↔\",\n underleftrightarrow: \"↔\",\n xleftrightarrow: \"↔\",\n Overrightarrow: \"⇒\",\n xRightarrow: \"⇒\",\n overleftharpoon: \"↼\",\n xleftharpoonup: \"↼\",\n overrightharpoon: \"⇀\",\n xrightharpoonup: \"⇀\",\n xLeftarrow: \"⇐\",\n xLeftrightarrow: \"⇔\",\n xhookleftarrow: \"↩\",\n xhookrightarrow: \"↪\",\n xmapsto: \"↦\",\n xrightharpoondown: \"⇁\",\n xleftharpoondown: \"↽\",\n xrightleftharpoons: \"⇌\",\n xleftrightharpoons: \"⇋\",\n xtwoheadleftarrow: \"↞\",\n xtwoheadrightarrow: \"↠\",\n xlongequal: \"=\",\n xtofrom: \"⇄\",\n xrightleftarrows: \"⇄\",\n xrightequilibrium: \"⇌\",\n // Not a perfect match.\n xleftequilibrium: \"⇋\",\n // None better available.\n \"\\\\cdrightarrow\": \"→\",\n \"\\\\cdleftarrow\": \"←\",\n \"\\\\cdlongequal\": \"=\"\n};\nvar mathMLnode = function mathMLnode(label) {\n var node = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, \"\")])\n ]);\n node.setAttribute(\"stretchy\", \"true\");\n return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. (<www.mathjax.org>)\n// Copyright (c) 2014-2017 Khan Academy (<www.khanacademy.org>)\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n// Many of the KaTeX stretchy wide elements use a long SVG image and an\n// overflow: hidden tactic to achieve a stretchy image while avoiding\n// distortion of arrowheads or brace corners.\n// The SVG typically contains a very long (400 em) arrow.\n// The SVG is in a container span that has overflow: hidden, so the span\n// acts like a window that exposes only part of the SVG.\n// The SVG always has a longer, thinner aspect ratio than the container span.\n// After the SVG fills 100% of the height of the container span,\n// there is a long arrow shaft left over. That left-over shaft is not shown.\n// Instead, it is sliced off because the span's CSS has overflow: hidden.\n// Thus, the reader sees an arrow that matches the subject matter width\n// without distortion.\n// Some functions, such as \\cancel, need to vary their aspect ratio. These\n// functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n// Low resolution monitors struggle to display images in fine detail.\n// So browsers apply anti-aliasing. A long straight arrow shaft therefore\n// will sometimes appear as if it has a blurred edge.\n// To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n// arrow shafts. That is, a second long thin rectangular SVG path has been\n// written directly on top of each arrow shaft. This reinforcement causes\n// some of the screen pixels to display as black instead of the anti-aliased\n// gray pixel that a single path would generate. So we get arrow shafts\n// whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\nvar katexImagesData = {\n // path(s), minWidth, height, align\n overrightarrow: [\n [\n \"rightarrow\"\n ],\n 0.888,\n 522,\n \"xMaxYMin\"\n ],\n overleftarrow: [\n [\n \"leftarrow\"\n ],\n 0.888,\n 522,\n \"xMinYMin\"\n ],\n underrightarrow: [\n [\n \"rightarrow\"\n ],\n 0.888,\n 522,\n \"xMaxYMin\"\n ],\n underleftarrow: [\n [\n \"leftarrow\"\n ],\n 0.888,\n 522,\n \"xMinYMin\"\n ],\n xrightarrow: [\n [\n \"rightarrow\"\n ],\n 1.469,\n 522,\n \"xMaxYMin\"\n ],\n \"\\\\cdrightarrow\": [\n [\n \"rightarrow\"\n ],\n 3.0,\n 522,\n \"xMaxYMin\"\n ],\n // CD minwwidth2.5pc\n xleftarrow: [\n [\n \"leftarrow\"\n ],\n 1.469,\n 522,\n \"xMinYMin\"\n ],\n \"\\\\cdleftarrow\": [\n [\n \"leftarrow\"\n ],\n 3.0,\n 522,\n \"xMinYMin\"\n ],\n Overrightarrow: [\n [\n \"doublerightarrow\"\n ],\n 0.888,\n 560,\n \"xMaxYMin\"\n ],\n xRightarrow: [\n [\n \"doublerightarrow\"\n ],\n 1.526,\n 560,\n \"xMaxYMin\"\n ],\n xLeftarrow: [\n [\n \"doubleleftarrow\"\n ],\n 1.526,\n 560,\n \"xMinYMin\"\n ],\n overleftharpoon: [\n [\n \"leftharpoon\"\n ],\n 0.888,\n 522,\n \"xMinYMin\"\n ],\n xleftharpoonup: [\n [\n \"leftharpoon\"\n ],\n 0.888,\n 522,\n \"xMinYMin\"\n ],\n xleftharpoondown: [\n [\n \"leftharpoondown\"\n ],\n 0.888,\n 522,\n \"xMinYMin\"\n ],\n overrightharpoon: [\n [\n \"rightharpoon\"\n ],\n 0.888,\n 522,\n \"xMaxYMin\"\n ],\n xrightharpoonup: [\n [\n \"rightharpoon\"\n ],\n 0.888,\n 522,\n \"xMaxYMin\"\n ],\n xrightharpoondown: [\n [\n \"rightharpoondown\"\n ],\n 0.888,\n 522,\n \"xMaxYMin\"\n ],\n xlongequal: [\n [\n \"longequal\"\n ],\n 0.888,\n 334,\n \"xMinYMin\"\n ],\n \"\\\\cdlongequal\": [\n [\n \"longequal\"\n ],\n 3.0,\n 334,\n \"xMinYMin\"\n ],\n xtwoheadleftarrow: [\n [\n \"twoheadleftarrow\"\n ],\n 0.888,\n 334,\n \"xMinYMin\"\n ],\n xtwoheadrightarrow: [\n [\n \"twoheadrightarrow\"\n ],\n 0.888,\n 334,\n \"xMaxYMin\"\n ],\n overleftrightarrow: [\n [\n \"leftarrow\",\n \"rightarrow\"\n ],\n 0.888,\n 522\n ],\n overbrace: [\n [\n \"leftbrace\",\n \"midbrace\",\n \"rightbrace\"\n ],\n 1.6,\n 548\n ],\n underbrace: [\n [\n \"leftbraceunder\",\n \"midbraceunder\",\n \"rightbraceunder\"\n ],\n 1.6,\n 548\n ],\n underleftrightarrow: [\n [\n \"leftarrow\",\n \"rightarrow\"\n ],\n 0.888,\n 522\n ],\n xleftrightarrow: [\n [\n \"leftarrow\",\n \"rightarrow\"\n ],\n 1.75,\n 522\n ],\n xLeftrightarrow: [\n [\n \"doubleleftarrow\",\n \"doublerightarrow\"\n ],\n 1.75,\n 560\n ],\n xrightleftharpoons: [\n [\n \"leftharpoondownplus\",\n \"rightharpoonplus\"\n ],\n 1.75,\n 716\n ],\n xleftrightharpoons: [\n [\n \"leftharpoonplus\",\n \"rightharpoondownplus\"\n ],\n 1.75,\n 716\n ],\n xhookleftarrow: [\n [\n \"leftarrow\",\n \"righthook\"\n ],\n 1.08,\n 522\n ],\n xhookrightarrow: [\n [\n \"lefthook\",\n \"rightarrow\"\n ],\n 1.08,\n 522\n ],\n overlinesegment: [\n [\n \"leftlinesegment\",\n \"rightlinesegment\"\n ],\n 0.888,\n 522\n ],\n underlinesegment: [\n [\n \"leftlinesegment\",\n \"rightlinesegment\"\n ],\n 0.888,\n 522\n ],\n overgroup: [\n [\n \"leftgroup\",\n \"rightgroup\"\n ],\n 0.888,\n 342\n ],\n undergroup: [\n [\n \"leftgroupunder\",\n \"rightgroupunder\"\n ],\n 0.888,\n 342\n ],\n xmapsto: [\n [\n \"leftmapsto\",\n \"rightarrow\"\n ],\n 1.5,\n 522\n ],\n xtofrom: [\n [\n \"leftToFrom\",\n \"rightToFrom\"\n ],\n 1.75,\n 528\n ],\n // The next three arrows are from the mhchem package.\n // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n // document as \\xrightarrow or \\xrightleftharpoons. Those have\n // min-length = 1.75em, so we set min-length on these next three to match.\n xrightleftarrows: [\n [\n \"baraboveleftarrow\",\n \"rightarrowabovebar\"\n ],\n 1.75,\n 901\n ],\n xrightequilibrium: [\n [\n \"baraboveshortleftharpoon\",\n \"rightharpoonaboveshortbar\"\n ],\n 1.75,\n 716\n ],\n xleftequilibrium: [\n [\n \"shortbaraboveleftharpoon\",\n \"shortrightharpoonabovebar\"\n ],\n 1.75,\n 716\n ]\n};\nvar groupLength = function groupLength(arg) {\n if (arg.type === \"ordgroup\") {\n return arg.body.length;\n } else {\n return 1;\n }\n};\nvar svgSpan = function svgSpan(group, options) {\n // Create a span with inline SVG for the element.\n function buildSvgSpan_() {\n var viewBoxWidth = 400000; // default\n var label = group.label.slice(1);\n if (utils.contains([\n \"widehat\",\n \"widecheck\",\n \"widetilde\",\n \"utilde\"\n ], label)) {\n // Each type in the `if` statement corresponds to one of the ParseNode\n // types below. This narrowing is required to access `grp.base`.\n // $FlowFixMe\n var grp = group; // There are four SVG images available for each function.\n // Choose a taller image when there are more characters.\n var numChars = groupLength(grp.base);\n var viewBoxHeight;\n var pathName;\n var _height;\n if (numChars > 5) {\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxHeight = 420;\n viewBoxWidth = 2364;\n _height = 0.42;\n pathName = label + \"4\";\n } else {\n viewBoxHeight = 312;\n viewBoxWidth = 2340;\n _height = 0.34;\n pathName = \"tilde4\";\n }\n } else {\n var imgIndex = [\n 1,\n 1,\n 2,\n 2,\n 3,\n 3\n ][numChars];\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxWidth = [\n 0,\n 1062,\n 2364,\n 2364,\n 2364\n ][imgIndex];\n viewBoxHeight = [\n 0,\n 239,\n 300,\n 360,\n 420\n ][imgIndex];\n _height = [\n 0,\n 0.24,\n 0.3,\n 0.3,\n 0.36,\n 0.42\n ][imgIndex];\n pathName = label + imgIndex;\n } else {\n viewBoxWidth = [\n 0,\n 600,\n 1033,\n 2339,\n 2340\n ][imgIndex];\n viewBoxHeight = [\n 0,\n 260,\n 286,\n 306,\n 312\n ][imgIndex];\n _height = [\n 0,\n 0.26,\n 0.286,\n 0.3,\n 0.306,\n 0.34\n ][imgIndex];\n pathName = \"tilde\" + imgIndex;\n }\n }\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([\n path\n ], {\n \"width\": \"100%\",\n \"height\": makeEm(_height),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n \"preserveAspectRatio\": \"none\"\n });\n return {\n span: buildCommon.makeSvgSpan([], [\n svgNode\n ], options),\n minWidth: 0,\n height: _height\n };\n } else {\n var spans = [];\n var data = katexImagesData[label];\n var [paths, _minWidth, _viewBoxHeight] = data;\n var _height2 = _viewBoxHeight / 1000;\n var numSvgChildren = paths.length;\n var widthClasses;\n var aligns;\n if (numSvgChildren === 1) {\n // $FlowFixMe: All these cases must be of the 4-tuple type.\n var align1 = data[3];\n widthClasses = [\n \"hide-tail\"\n ];\n aligns = [\n align1\n ];\n } else if (numSvgChildren === 2) {\n widthClasses = [\n \"halfarrow-left\",\n \"halfarrow-right\"\n ];\n aligns = [\n \"xMinYMin\",\n \"xMaxYMin\"\n ];\n } else if (numSvgChildren === 3) {\n widthClasses = [\n \"brace-left\",\n \"brace-center\",\n \"brace-right\"\n ];\n aligns = [\n \"xMinYMin\",\n \"xMidYMin\",\n \"xMaxYMin\"\n ];\n } else {\n throw new Error(\"Correct katexImagesData or update code here to support\\n \" + numSvgChildren + \" children.\");\n }\n for(var i = 0; i < numSvgChildren; i++){\n var _path = new PathNode(paths[i]);\n var _svgNode = new SvgNode([\n _path\n ], {\n \"width\": \"400em\",\n \"height\": makeEm(_height2),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n \"preserveAspectRatio\": aligns[i] + \" slice\"\n });\n var _span = buildCommon.makeSvgSpan([\n widthClasses[i]\n ], [\n _svgNode\n ], options);\n if (numSvgChildren === 1) {\n return {\n span: _span,\n minWidth: _minWidth,\n height: _height2\n };\n } else {\n _span.style.height = makeEm(_height2);\n spans.push(_span);\n }\n }\n return {\n span: buildCommon.makeSpan([\n \"stretchy\"\n ], spans, options),\n minWidth: _minWidth,\n height: _height2\n };\n }\n } // buildSvgSpan_()\n var { span, minWidth, height } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n // Any adjustments relative to the baseline must be done in buildHTML.\n span.height = height;\n span.style.height = makeEm(height);\n if (minWidth > 0) {\n span.style.minWidth = makeEm(minWidth);\n }\n return span;\n};\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n var img;\n var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n if (/fbox|color|angl/.test(label)) {\n img = buildCommon.makeSpan([\n \"stretchy\",\n label\n ], [], options);\n if (label === \"fbox\") {\n var color = options.color && options.getColor();\n if (color) {\n img.style.borderColor = color;\n }\n }\n } else {\n // \\cancel, \\bcancel, or \\xcancel\n // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n // its stroke-width will not vary with span area.\n var lines = [];\n if (/^[bx]cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"0\",\n \"x2\": \"100%\",\n \"y2\": \"100%\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n if (/^x?cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"100%\",\n \"x2\": \"100%\",\n \"y2\": \"0\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n var svgNode = new SvgNode(lines, {\n \"width\": \"100%\",\n \"height\": makeEm(totalHeight)\n });\n img = buildCommon.makeSvgSpan([], [\n svgNode\n ], options);\n }\n img.height = totalHeight;\n img.style.height = makeEm(totalHeight);\n return img;\n};\nvar stretchy = {\n encloseSpan,\n mathMLnode,\n svgSpan\n};\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */ function assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n } // $FlowFixMe, >=0.125\n return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */ function assertSymbolNodeType(node) {\n var typedNode = checkSymbolNodeType(node);\n if (!typedNode) {\n throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n }\n return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */ function checkSymbolNodeType(node) {\n if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n // $FlowFixMe\n return node;\n }\n return null;\n}\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options)=>{\n // Accents are handled in the TeXbook pg. 443, rule 12.\n var base;\n var group;\n var supSubGroup;\n if (grp && grp.type === \"supsub\") {\n // If our base is a character box, and we have superscripts and\n // subscripts, the supsub will defer to us. In particular, we want\n // to attach the superscripts and subscripts to the inner body (so\n // that the position of the superscripts and subscripts won't be\n // affected by the height of the accent). We accomplish this by\n // sticking the base of the accent into the base of the supsub, and\n // rendering that, while keeping track of where the accent is.\n // The real accent group is the base of the supsub group\n group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n base = group.base; // Stick the character box into the base of the supsub group\n grp.base = base; // Rerender the supsub group with its new base, and store that\n // result.\n supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n grp.base = group;\n } else {\n group = assertNodeType(grp, \"accent\");\n base = group.base;\n } // Build the base group\n var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n // nucleus is not a single character, let s = 0; otherwise set s to the\n // kern amount for the nucleus followed by the \\skewchar of its font.\"\n // Note that our skew metrics are just the kern between each character\n // and the skewchar.\n var skew = 0;\n if (mustShift) {\n // If the base is a character box, then we want the skew of the\n // innermost character. To do that, we find the innermost character:\n var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n // removed with getBaseElem might contain things like \\color which\n // we can't get rid of.\n // TODO(emily): Find a better way to get the skew\n }\n var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n var accentBody;\n if (!group.isStretchy) {\n var accent;\n var width;\n if (group.label === \"\\\\vec\") {\n // Before version 0.9, \\vec used the combining font glyph U+20D7.\n // But browsers, especially Safari, are not consistent in how they\n // render combining characters when not preceded by a character.\n // So now we use an SVG.\n // If Safari reforms, we should consider reverting to the glyph.\n accent = buildCommon.staticSvg(\"vec\", options);\n width = buildCommon.svgData.vec[1];\n } else {\n accent = buildCommon.makeOrd({\n mode: group.mode,\n text: group.label\n }, options, \"textord\");\n accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n // shift the accent over to a place we don't want.\n accent.italic = 0;\n width = accent.width;\n if (accentBelow) {\n clearance += accent.depth;\n }\n }\n accentBody = buildCommon.makeSpan([\n \"accent-body\"\n ], [\n accent\n ]); // \"Full\" accents expand the width of the resulting symbol to be\n // at least the width of the accent, and overlap directly onto the\n // character without any vertical offset.\n var accentFull = group.label === \"\\\\textcircled\";\n if (accentFull) {\n accentBody.classes.push(\"accent-full\");\n clearance = body.height;\n } // Shift the accent over by the skew.\n var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n // so that the accent doesn't contribute to the bounding box.\n // We need to shift the character by its width (effectively half\n // its width) to compensate.\n if (!accentFull) {\n left -= width / 2;\n }\n accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n // vertical adjustment to match LaTeX.\n if (group.label === \"\\\\textcircled\") {\n accentBody.style.top = \".2em\";\n }\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: body\n },\n {\n type: \"kern\",\n size: -clearance\n },\n {\n type: \"elem\",\n elem: accentBody\n }\n ]\n }, options);\n } else {\n accentBody = stretchy.svgSpan(group, options);\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: body\n },\n {\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\n \"svg-align\"\n ],\n wrapperStyle: skew > 0 ? {\n width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n marginLeft: makeEm(2 * skew)\n } : undefined\n }\n ]\n }, options);\n }\n var accentWrap = buildCommon.makeSpan([\n \"mord\",\n \"accent\"\n ], [\n accentBody\n ], options);\n if (supSubGroup) {\n // Here, we replace the \"base\" child of the supsub with our newly\n // generated accent.\n supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n // accent, we manually recalculate height.\n supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n supSubGroup.classes[0] = \"mord\";\n return supSubGroup;\n } else {\n return accentWrap;\n }\n};\nvar mathmlBuilder$9 = (group, options)=>{\n var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [\n makeText(group.label, group.mode)\n ]);\n var node = new mathMLTree.MathNode(\"mover\", [\n buildGroup(group.base, options),\n accentNode\n ]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n};\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\n \"\\\\acute\",\n \"\\\\grave\",\n \"\\\\ddot\",\n \"\\\\tilde\",\n \"\\\\bar\",\n \"\\\\breve\",\n \"\\\\check\",\n \"\\\\hat\",\n \"\\\\vec\",\n \"\\\\dot\",\n \"\\\\mathring\"\n].map((accent)=>\"\\\\\" + accent).join(\"|\")); // Accents\ndefineFunction({\n type: \"accent\",\n names: [\n \"\\\\acute\",\n \"\\\\grave\",\n \"\\\\ddot\",\n \"\\\\tilde\",\n \"\\\\bar\",\n \"\\\\breve\",\n \"\\\\check\",\n \"\\\\hat\",\n \"\\\\vec\",\n \"\\\\dot\",\n \"\\\\mathring\",\n \"\\\\widecheck\",\n \"\\\\widehat\",\n \"\\\\widetilde\",\n \"\\\\overrightarrow\",\n \"\\\\overleftarrow\",\n \"\\\\Overrightarrow\",\n \"\\\\overleftrightarrow\",\n \"\\\\overgroup\",\n \"\\\\overlinesegment\",\n \"\\\\overleftharpoon\",\n \"\\\\overrightharpoon\"\n ],\n props: {\n numArgs: 1\n },\n handler: (context, args)=>{\n var base = normalizeArgument(args[0]);\n var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n return {\n type: \"accent\",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy: isStretchy,\n isShifty: isShifty,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\ndefineFunction({\n type: \"accent\",\n names: [\n \"\\\\'\",\n \"\\\\`\",\n \"\\\\^\",\n \"\\\\~\",\n \"\\\\=\",\n \"\\\\u\",\n \"\\\\.\",\n '\\\\\"',\n \"\\\\c\",\n \"\\\\r\",\n \"\\\\H\",\n \"\\\\v\",\n \"\\\\textcircled\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n // unless in strict mode\n argTypes: [\n \"primitive\"\n ]\n },\n handler: (context, args)=>{\n var base = args[0];\n var mode = context.parser.mode;\n if (mode === \"math\") {\n context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n mode = \"text\";\n }\n return {\n type: \"accent\",\n mode: mode,\n label: context.funcName,\n isStretchy: false,\n isShifty: true,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n});\n// Horizontal overlap functions\ndefineFunction({\n type: \"accentUnder\",\n names: [\n \"\\\\underleftarrow\",\n \"\\\\underrightarrow\",\n \"\\\\underleftrightarrow\",\n \"\\\\undergroup\",\n \"\\\\underlinesegment\",\n \"\\\\utilde\"\n ],\n props: {\n numArgs: 1\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var base = args[0];\n return {\n type: \"accentUnder\",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n htmlBuilder: (group, options)=>{\n // Treat under accents much like underlines.\n var innerGroup = buildGroup$1(group.base, options);\n var accentBody = stretchy.svgSpan(group, options);\n var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [\n {\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\n \"svg-align\"\n ]\n },\n {\n type: \"kern\",\n size: kern\n },\n {\n type: \"elem\",\n elem: innerGroup\n }\n ]\n }, options);\n return buildCommon.makeSpan([\n \"mord\",\n \"accentunder\"\n ], [\n vlist\n ], options);\n },\n mathmlBuilder: (group, options)=>{\n var accentNode = stretchy.mathMLnode(group.label);\n var node = new mathMLTree.MathNode(\"munder\", [\n buildGroup(group.base, options),\n accentNode\n ]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n});\n// Helper function\nvar paddedNode = (group)=>{\n var node = new mathMLTree.MathNode(\"mpadded\", group ? [\n group\n ] : []);\n node.setAttribute(\"width\", \"+0.6em\");\n node.setAttribute(\"lspace\", \"0.3em\");\n return node;\n}; // Stretchy arrows with an optional argument\ndefineFunction({\n type: \"xArrow\",\n names: [\n \"\\\\xleftarrow\",\n \"\\\\xrightarrow\",\n \"\\\\xLeftarrow\",\n \"\\\\xRightarrow\",\n \"\\\\xleftrightarrow\",\n \"\\\\xLeftrightarrow\",\n \"\\\\xhookleftarrow\",\n \"\\\\xhookrightarrow\",\n \"\\\\xmapsto\",\n \"\\\\xrightharpoondown\",\n \"\\\\xrightharpoonup\",\n \"\\\\xleftharpoondown\",\n \"\\\\xleftharpoonup\",\n \"\\\\xrightleftharpoons\",\n \"\\\\xleftrightharpoons\",\n \"\\\\xlongequal\",\n \"\\\\xtwoheadrightarrow\",\n \"\\\\xtwoheadleftarrow\",\n \"\\\\xtofrom\",\n // Direct use of these functions is discouraged and may break someday.\n \"\\\\xrightleftarrows\",\n \"\\\\xrightequilibrium\",\n \"\\\\xleftequilibrium\",\n \"\\\\\\\\cdrightarrow\",\n \"\\\\\\\\cdleftarrow\",\n \"\\\\\\\\cdlongequal\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n handler (_ref, args, optArgs) {\n var { parser, funcName } = _ref;\n return {\n type: \"xArrow\",\n mode: parser.mode,\n label: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n // Flow is unable to correctly infer the type of `group`, even though it's\n // unambiguously determined from the passed-in `type` above.\n htmlBuilder (group, options) {\n var style = options.style; // Build the argument groups in the appropriate style.\n // Ref: amsmath.dtx: \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n var newOptions = options.havingStyle(style.sup());\n var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n var lowerGroup;\n if (group.below) {\n // Build the lower group\n newOptions = options.havingStyle(style.sub());\n lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n }\n var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n // The point we want on the math axis is at 0.5 * arrowBody.height.\n var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n upperShift -= upperGroup.depth; // shift up if depth encroaches\n } // Generate the vlist\n var vlist;\n if (lowerGroup) {\n var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n },\n {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n },\n {\n type: \"elem\",\n elem: lowerGroup,\n shift: lowerShift\n }\n ]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n },\n {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }\n ]\n }, options);\n } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n return buildCommon.makeSpan([\n \"mrel\",\n \"x-arrow\"\n ], [\n vlist\n ], options);\n },\n mathmlBuilder (group, options) {\n var arrowNode = stretchy.mathMLnode(group.label);\n arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n var node;\n if (group.body) {\n var upperNode = paddedNode(buildGroup(group.body, options));\n if (group.below) {\n var lowerNode = paddedNode(buildGroup(group.below, options));\n node = new mathMLTree.MathNode(\"munderover\", [\n arrowNode,\n lowerNode,\n upperNode\n ]);\n } else {\n node = new mathMLTree.MathNode(\"mover\", [\n arrowNode,\n upperNode\n ]);\n }\n } else if (group.below) {\n var _lowerNode = paddedNode(buildGroup(group.below, options));\n node = new mathMLTree.MathNode(\"munder\", [\n arrowNode,\n _lowerNode\n ]);\n } else {\n // This should never happen.\n // Parser.js throws an error if there is no argument.\n node = paddedNode();\n node = new mathMLTree.MathNode(\"mover\", [\n arrowNode,\n node\n ]);\n }\n return node;\n }\n});\nvar makeSpan = buildCommon.makeSpan;\nfunction htmlBuilder$9(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n return makeSpan([\n group.mclass\n ], elements, options);\n}\nfunction mathmlBuilder$8(group, options) {\n var node;\n var inner = buildExpression(group.body, options);\n if (group.mclass === \"minner\") {\n node = new mathMLTree.MathNode(\"mpadded\", inner);\n } else if (group.mclass === \"mord\") {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mi\";\n } else {\n node = new mathMLTree.MathNode(\"mi\", inner);\n }\n } else {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mo\";\n } else {\n node = new mathMLTree.MathNode(\"mo\", inner);\n } // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n if (group.mclass === \"mbin\") {\n node.attributes.lspace = \"0.22em\"; // medium space\n node.attributes.rspace = \"0.22em\";\n } else if (group.mclass === \"mpunct\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0.17em\"; // thinspace\n } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0em\";\n } else if (group.mclass === \"minner\") {\n node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n node.attributes.width = \"+0.1111em\";\n } // MathML <mo> default space is 5/18 em, so <mrel> needs no action.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n }\n return node;\n} // Math class commands except \\mathop\ndefineFunction({\n type: \"mclass\",\n names: [\n \"\\\\mathord\",\n \"\\\\mathbin\",\n \"\\\\mathrel\",\n \"\\\\mathopen\",\n \"\\\\mathclose\",\n \"\\\\mathpunct\",\n \"\\\\mathinner\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n var body = args[0];\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: \"m\" + funcName.slice(5),\n // TODO(kevinb): don't prefix with 'm'\n body: ordargument(body),\n isCharacterBox: utils.isCharacterBox(body)\n };\n },\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = (arg)=>{\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We'll do roughly the same by detecting the\n // atom type directly.\n var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n return \"m\" + atom.family;\n } else {\n return \"mord\";\n }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\ndefineFunction({\n type: \"mclass\",\n names: [\n \"\\\\@binrel\"\n ],\n props: {\n numArgs: 2\n },\n handler (_ref2, args) {\n var { parser } = _ref2;\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n}); // Build a relation or stacked op by placing one symbol on top of another\ndefineFunction({\n type: \"mclass\",\n names: [\n \"\\\\stackrel\",\n \"\\\\overset\",\n \"\\\\underset\"\n ],\n props: {\n numArgs: 2\n },\n handler (_ref3, args) {\n var { parser, funcName } = _ref3;\n var baseArg = args[1];\n var shiftedArg = args[0];\n var mclass;\n if (funcName !== \"\\\\stackrel\") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = \"mrel\"; // for \\stackrel\n }\n var baseOp = {\n type: \"op\",\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== \"\\\\stackrel\",\n body: ordargument(baseArg)\n };\n var supsub = {\n type: \"supsub\",\n mode: shiftedArg.mode,\n base: baseOp,\n sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n sub: funcName === \"\\\\underset\" ? shiftedArg : null\n };\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass,\n body: [\n supsub\n ],\n isCharacterBox: utils.isCharacterBox(supsub)\n };\n },\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n type: \"pmb\",\n names: [\n \"\\\\pmb\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser } = _ref;\n return {\n type: \"pmb\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[0])\n };\n },\n htmlBuilder (group, options) {\n var elements = buildExpression$1(group.body, options, true);\n var node = buildCommon.makeSpan([\n group.mclass\n ], elements, options);\n node.style.textShadow = \"0.02em 0.01em 0.04px\";\n return node;\n },\n mathmlBuilder (group, style) {\n var inner = buildExpression(group.body, style); // Wrap with an <mstyle> element.\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n return node;\n }\n});\nvar cdArrowFunctionName = {\n \">\": \"\\\\\\\\cdrightarrow\",\n \"<\": \"\\\\\\\\cdleftarrow\",\n \"=\": \"\\\\\\\\cdlongequal\",\n \"A\": \"\\\\uparrow\",\n \"V\": \"\\\\downarrow\",\n \"|\": \"\\\\Vert\",\n \".\": \"no arrow\"\n};\nvar newCell = ()=>{\n // Create an empty cell, to be filled below with parse nodes.\n // The parseTree from this module must be constructed like the\n // one created by parseArray(), so an empty CD cell must\n // be a ParseNode<\"styling\">. And CD is always displaystyle.\n // So these values are fixed and flow can do implicit typing.\n return {\n type: \"styling\",\n body: [],\n mode: \"math\",\n style: \"display\"\n };\n};\nvar isStartOfArrow = (node)=>{\n return node.type === \"textord\" && node.text === \"@\";\n};\nvar isLabelEnd = (node, endChar)=>{\n return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n var funcName = cdArrowFunctionName[arrowChar];\n switch(funcName){\n case \"\\\\\\\\cdrightarrow\":\n case \"\\\\\\\\cdleftarrow\":\n return parser.callFunction(funcName, [\n labels[0]\n ], [\n labels[1]\n ]);\n case \"\\\\uparrow\":\n case \"\\\\downarrow\":\n {\n var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [\n labels[0]\n ], []);\n var bareArrow = {\n type: \"atom\",\n text: funcName,\n mode: \"math\",\n family: \"rel\"\n };\n var sizedArrow = parser.callFunction(\"\\\\Big\", [\n bareArrow\n ], []);\n var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [\n labels[1]\n ], []);\n var arrowGroup = {\n type: \"ordgroup\",\n mode: \"math\",\n body: [\n leftLabel,\n sizedArrow,\n rightLabel\n ]\n };\n return parser.callFunction(\"\\\\\\\\cdparent\", [\n arrowGroup\n ], []);\n }\n case \"\\\\\\\\cdlongequal\":\n return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n case \"\\\\Vert\":\n {\n var arrow = {\n type: \"textord\",\n text: \"\\\\Vert\",\n mode: \"math\"\n };\n return parser.callFunction(\"\\\\Big\", [\n arrow\n ], []);\n }\n default:\n return {\n type: \"textord\",\n text: \" \",\n mode: \"math\"\n };\n }\n}\nfunction parseCD(parser) {\n // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n var parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n parser.gullet.beginGroup();\n while(true){\n // eslint-disable-line no-constant-condition\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n var next = parser.fetch().text;\n if (next === \"&\" || next === \"\\\\\\\\\") {\n parser.consume();\n } else if (next === \"\\\\end\") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n break;\n } else {\n throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n }\n var row = [];\n var body = [\n row\n ]; // Loop thru the parse nodes. Collect them into cells and arrows.\n for(var i = 0; i < parsedRows.length; i++){\n // Start a new row.\n var rowNodes = parsedRows[i]; // Create the first cell.\n var cell = newCell();\n for(var j = 0; j < rowNodes.length; j++){\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an \"@\", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell); // Now collect parseNodes into an arrow.\n // The character after \"@\" defines the arrow type.\n j += 1;\n var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n var labels = new Array(2);\n labels[0] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n };\n labels[1] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n }; // Process the arrow.\n if (\"=|.\".indexOf(arrowChar) > -1) ;\n else if (\"<>AV\".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for(var labelNum = 0; labelNum < 2; labelNum++){\n var inLabel = true;\n for(var k = j + 1; k < rowNodes.length; k++){\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n if (isStartOfArrow(rowNodes[k])) {\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n }\n labels[labelNum].body.push(rowNodes[k]);\n }\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n }\n }\n } else {\n throw new ParseError('Expected one of \"<>AV=|.\" after @', rowNodes[j]);\n } // Now join the arrow to its labels.\n var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<\"styling\">.\n // This is done to match parseArray() behavior.\n var wrappedArrow = {\n type: \"styling\",\n body: [\n arrow\n ],\n mode: \"math\",\n style: \"display\" // CD is always displaystyle.\n };\n row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n cell = newCell();\n }\n }\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n row = [];\n body.push(row);\n } // End row group\n parser.gullet.endGroup(); // End array group defining \\\\\n parser.gullet.endGroup(); // define column separation.\n var cols = new Array(body[0].length).fill({\n type: \"align\",\n align: \"c\",\n pregap: 0.25,\n // CD package sets \\enskip between columns.\n postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n });\n return {\n type: \"array\",\n mode: \"math\",\n body,\n arraystretch: 1,\n addJot: true,\n rowGaps: [\n null\n ],\n cols,\n colSeparationType: \"CD\",\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\ndefineFunction({\n type: \"cdlabel\",\n names: [\n \"\\\\\\\\cdleft\",\n \"\\\\\\\\cdright\"\n ],\n props: {\n numArgs: 1\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n return {\n type: \"cdlabel\",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n htmlBuilder (group, options) {\n var newOptions = options.havingStyle(options.style.sup());\n var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n label.classes.push(\"cd-label-\" + group.side);\n label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n // by the arrow height, not by the label.\n label.height = 0;\n label.depth = 0;\n return label;\n },\n mathmlBuilder (group, options) {\n var label = new mathMLTree.MathNode(\"mrow\", [\n buildGroup(group.label, options)\n ]);\n label = new mathMLTree.MathNode(\"mpadded\", [\n label\n ]);\n label.setAttribute(\"width\", \"0\");\n if (group.side === \"left\") {\n label.setAttribute(\"lspace\", \"-1width\");\n } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n // But we don't know the height or depth of the label.\n label.setAttribute(\"voffset\", \"0.7em\");\n label = new mathMLTree.MathNode(\"mstyle\", [\n label\n ]);\n label.setAttribute(\"displaystyle\", \"false\");\n label.setAttribute(\"scriptlevel\", \"1\");\n return label;\n }\n});\ndefineFunction({\n type: \"cdlabelparent\",\n names: [\n \"\\\\\\\\cdparent\"\n ],\n props: {\n numArgs: 1\n },\n handler (_ref2, args) {\n var { parser } = _ref2;\n return {\n type: \"cdlabelparent\",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n htmlBuilder (group, options) {\n // Wrap the vertical arrow and its labels.\n // The parent gets position: relative. The child gets position: absolute.\n // So CSS can locate the label correctly.\n var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n parent.classes.push(\"cd-vert-arrow\");\n return parent;\n },\n mathmlBuilder (group, options) {\n return new mathMLTree.MathNode(\"mrow\", [\n buildGroup(group.fragment, options)\n ]);\n }\n});\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\ndefineFunction({\n type: \"textord\",\n names: [\n \"\\\\@char\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser } = _ref;\n var arg = assertNodeType(args[0], \"ordgroup\");\n var group = arg.body;\n var number = \"\";\n for(var i = 0; i < group.length; i++){\n var node = assertNodeType(group[i], \"textord\");\n number += node.text;\n }\n var code = parseInt(number);\n var text;\n if (isNaN(code)) {\n throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n // text = String.fromCodePoint(code)\n } else if (code < 0 || code >= 0x10ffff) {\n throw new ParseError(\"\\\\@char with invalid code point \" + number);\n } else if (code <= 0xffff) {\n text = String.fromCharCode(code);\n } else {\n // Astral code point; split into surrogate halves\n code -= 0x10000;\n text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n }\n return {\n type: \"textord\",\n mode: parser.mode,\n text: text\n };\n }\n});\nvar htmlBuilder$8 = (group, options)=>{\n var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n // To accomplish this, we wrap the results in a fragment, so the inner\n // elements will be able to directly interact with their neighbors. For\n // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n return buildCommon.makeFragment(elements);\n};\nvar mathmlBuilder$7 = (group, options)=>{\n var inner = buildExpression(group.body, options.withColor(group.color));\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"mathcolor\", group.color);\n return node;\n};\ndefineFunction({\n type: \"color\",\n names: [\n \"\\\\textcolor\"\n ],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\n \"color\",\n \"original\"\n ]\n },\n handler (_ref, args) {\n var { parser } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body: ordargument(body)\n };\n },\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n type: \"color\",\n names: [\n \"\\\\color\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true,\n argTypes: [\n \"color\"\n ]\n },\n handler (_ref2, args) {\n var { parser, breakOnTokenText } = _ref2;\n var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n // color, mimicking the behavior of color.sty.\n // This is currently used just to correctly color a \\right\n // that follows a \\color command.\n parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n var body = parser.parseExpression(true, breakOnTokenText);\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body\n };\n },\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\n// Row breaks within tabular environments, and line breaks at top level\ndefineFunction({\n type: \"cr\",\n names: [\n \"\\\\\\\\\"\n ],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n handler (_ref, args, optArgs) {\n var { parser } = _ref;\n var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n return {\n type: \"cr\",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, \"size\").value\n };\n },\n // The following builders are called only at the top level,\n // not within tabular/array environments.\n htmlBuilder (group, options) {\n var span = buildCommon.makeSpan([\n \"mspace\"\n ], [], options);\n if (group.newLine) {\n span.classes.push(\"newline\");\n if (group.size) {\n span.style.marginTop = makeEm(calculateSize(group.size, options));\n }\n }\n return span;\n },\n mathmlBuilder (group, options) {\n var node = new mathMLTree.MathNode(\"mspace\");\n if (group.newLine) {\n node.setAttribute(\"linebreak\", \"newline\");\n if (group.size) {\n node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n }\n }\n return node;\n }\n});\nvar globalMap = {\n \"\\\\global\": \"\\\\global\",\n \"\\\\long\": \"\\\\\\\\globallong\",\n \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n \"\\\\def\": \"\\\\gdef\",\n \"\\\\gdef\": \"\\\\gdef\",\n \"\\\\edef\": \"\\\\xdef\",\n \"\\\\xdef\": \"\\\\xdef\",\n \"\\\\let\": \"\\\\\\\\globallet\",\n \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\nvar checkControlSequence = (tok)=>{\n var name = tok.text;\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n return name;\n};\nvar getRHS = (parser)=>{\n var tok = parser.gullet.popToken();\n if (tok.text === \"=\") {\n // consume optional equals\n tok = parser.gullet.popToken();\n if (tok.text === \" \") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n return tok;\n};\nvar letCommand = (parser, name, tok, global)=>{\n var macro = parser.gullet.macros.get(tok.text);\n if (macro == null) {\n // don't expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [\n tok\n ],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n parser.gullet.macros.set(name, macro, global);\n}; // <assignment> -> <non-macro assignment>|<macro assignment>\n// <non-macro assignment> -> <simple assignment>|\\global<non-macro assignment>\n// <macro assignment> -> <definition>|<prefix><macro assignment>\n// <prefix> -> \\global|\\long|\\outer\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\global\",\n \"\\\\long\",\n \"\\\\\\\\globallong\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler (_ref) {\n var { parser, funcName } = _ref;\n parser.consumeSpaces();\n var token = parser.fetch();\n if (globalMap[token.text]) {\n // KaTeX doesn't have \\par, so ignore \\long\n if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n token.text = globalMap[token.text];\n }\n return assertNodeType(parser.parseFunction(), \"internal\");\n }\n throw new ParseError(\"Invalid token after macro prefix\", token);\n }\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// <definition> -> <def><control sequence><definition text>\n// <def> -> \\def|\\gdef|\\edef|\\xdef\n// <definition text> -> <parameter text><left brace><balanced text><right brace>\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\def\",\n \"\\\\gdef\",\n \"\\\\edef\",\n \"\\\\xdef\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler (_ref2) {\n var { parser, funcName } = _ref2;\n var tok = parser.gullet.popToken();\n var name = tok.text;\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n var numArgs = 0;\n var insert;\n var delimiters = [\n []\n ]; // <parameter text> contains no braces\n while(parser.gullet.future().text !== \"{\"){\n tok = parser.gullet.popToken();\n if (tok.text === \"#\") {\n // If the very last character of the <parameter text> is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === \"{\") {\n insert = parser.gullet.future();\n delimiters[numArgs].push(\"{\");\n break;\n } // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #’s are allowed\n tok = parser.gullet.popToken();\n if (!/^[1-9]$/.test(tok.text)) {\n throw new ParseError('Invalid argument number \"' + tok.text + '\"');\n }\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new ParseError('Argument number \"' + tok.text + '\" out of order');\n }\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Expected a macro definition\");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n } // replacement text, enclosed in '{' and '}' and properly nested\n var { tokens } = parser.gullet.consumeArg();\n if (insert) {\n tokens.unshift(insert);\n }\n if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n tokens = parser.gullet.expandTokens(tokens);\n tokens.reverse(); // to fit in with stack order\n } // Final arg is the expansion of the macro\n parser.gullet.macros.set(name, {\n tokens,\n numArgs,\n delimiters\n }, funcName === globalMap[funcName]);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n}); // <simple assignment> -> <let assignment>\n// <let assignment> -> \\futurelet<control sequence><token><token>\n// | \\let<control sequence><equals><one optional space><token>\n// <equals> -> <optional spaces>|<optional spaces>=\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\let\",\n \"\\\\\\\\globallet\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler (_ref3) {\n var { parser, funcName } = _ref3;\n var name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n var tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\futurelet\",\n \"\\\\\\\\globalfuture\" // can’t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler (_ref4) {\n var { parser, funcName } = _ref4;\n var name = checkControlSequence(parser.gullet.popToken());\n var middle = parser.gullet.popToken();\n var tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n});\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */ /**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */ var getMetrics = function getMetrics(symbol, font, mode) {\n var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n var metrics = getCharacterMetrics(replace || symbol, font, mode);\n if (!metrics) {\n throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n }\n return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */ var styleWrap = function styleWrap(delim, toStyle, options, classes) {\n var newOptions = options.havingBaseStyle(toStyle);\n var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [\n delim\n ], options);\n var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n span.height *= delimSizeMultiplier;\n span.depth *= delimSizeMultiplier;\n span.maxFontSize = newOptions.sizeMultiplier;\n return span;\n};\nvar centerSpan = function centerSpan(span, options, style) {\n var newOptions = options.havingBaseStyle(style);\n var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n span.classes.push(\"delimcenter\");\n span.style.top = makeEm(shift);\n span.height -= shift;\n span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */ var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n var span = styleWrap(text, style, options, classes);\n if (center) {\n centerSpan(span, options, style);\n }\n return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */ var mathrmSize = function mathrmSize(value, size, mode, options) {\n return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */ var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n var inner = mathrmSize(delim, size, mode, options);\n var span = styleWrap(buildCommon.makeSpan([\n \"delimsizing\",\n \"size\" + size\n ], [\n inner\n ], options), Style$1.TEXT, options, classes);\n if (center) {\n centerSpan(span, options, Style$1.TEXT);\n }\n return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */ var makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n var sizeClass; // Apply the correct CSS class to choose the right font.\n if (font === \"Size1-Regular\") {\n sizeClass = \"delim-size1\";\n } else /* if (font === \"Size4-Regular\") */ {\n sizeClass = \"delim-size4\";\n }\n var corner = buildCommon.makeSpan([\n \"delimsizinginner\",\n sizeClass\n ], [\n buildCommon.makeSpan([], [\n buildCommon.makeSymbol(symbol, font, mode)\n ])\n ]); // Since this will be passed into `makeVList` in the end, wrap the element\n // in the appropriate tag that VList uses.\n return {\n type: \"elem\",\n elem: corner\n };\n};\nvar makeInner = function makeInner(ch, height, options) {\n // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n var width = fontMetricsData[\"Size4-Regular\"][ch.charCodeAt(0)] ? fontMetricsData[\"Size4-Regular\"][ch.charCodeAt(0)][4] : fontMetricsData[\"Size1-Regular\"][ch.charCodeAt(0)][4];\n var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n var svgNode = new SvgNode([\n path\n ], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = buildCommon.makeSvgSpan([], [\n svgNode\n ], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return {\n type: \"elem\",\n elem: span\n };\n}; // Helpers for makeStackedDelim\nvar lapInEms = 0.008;\nvar lap = {\n type: \"kern\",\n size: -1 * lapInEms\n};\nvar verts = [\n \"|\",\n \"\\\\lvert\",\n \"\\\\rvert\",\n \"\\\\vert\"\n];\nvar doubleVerts = [\n \"\\\\|\",\n \"\\\\lVert\",\n \"\\\\rVert\",\n \"\\\\Vert\"\n];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */ var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n // There are four parts, the top, an optional middle, a repeated part, and a\n // bottom.\n var top;\n var middle;\n var repeat;\n var bottom;\n var svgLabel = \"\";\n var viewBoxWidth = 0;\n top = repeat = bottom = delim;\n middle = null; // Also keep track of what font the delimiters are in\n var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n // repeats of the arrows\n if (delim === \"\\\\uparrow\") {\n repeat = bottom = \"⏐\";\n } else if (delim === \"\\\\Uparrow\") {\n repeat = bottom = \"‖\";\n } else if (delim === \"\\\\downarrow\") {\n top = repeat = \"⏐\";\n } else if (delim === \"\\\\Downarrow\") {\n top = repeat = \"‖\";\n } else if (delim === \"\\\\updownarrow\") {\n top = \"\\\\uparrow\";\n repeat = \"⏐\";\n bottom = \"\\\\downarrow\";\n } else if (delim === \"\\\\Updownarrow\") {\n top = \"\\\\Uparrow\";\n repeat = \"‖\";\n bottom = \"\\\\Downarrow\";\n } else if (utils.contains(verts, delim)) {\n repeat = \"∣\";\n svgLabel = \"vert\";\n viewBoxWidth = 333;\n } else if (utils.contains(doubleVerts, delim)) {\n repeat = \"∥\";\n svgLabel = \"doublevert\";\n viewBoxWidth = 556;\n } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n top = \"⎡\";\n repeat = \"⎢\";\n bottom = \"⎣\";\n font = \"Size4-Regular\";\n svgLabel = \"lbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n top = \"⎤\";\n repeat = \"⎥\";\n bottom = \"⎦\";\n font = \"Size4-Regular\";\n svgLabel = \"rbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lfloor\" || delim === \"⌊\") {\n repeat = top = \"⎢\";\n bottom = \"⎣\";\n font = \"Size4-Regular\";\n svgLabel = \"lfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lceil\" || delim === \"⌈\") {\n top = \"⎡\";\n repeat = bottom = \"⎢\";\n font = \"Size4-Regular\";\n svgLabel = \"lceil\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rfloor\" || delim === \"⌋\") {\n repeat = top = \"⎥\";\n bottom = \"⎦\";\n font = \"Size4-Regular\";\n svgLabel = \"rfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rceil\" || delim === \"⌉\") {\n top = \"⎤\";\n repeat = bottom = \"⎥\";\n font = \"Size4-Regular\";\n svgLabel = \"rceil\";\n viewBoxWidth = 667;\n } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n top = \"⎛\";\n repeat = \"⎜\";\n bottom = \"⎝\";\n font = \"Size4-Regular\";\n svgLabel = \"lparen\";\n viewBoxWidth = 875;\n } else if (delim === \")\" || delim === \"\\\\rparen\") {\n top = \"⎞\";\n repeat = \"⎟\";\n bottom = \"⎠\";\n font = \"Size4-Regular\";\n svgLabel = \"rparen\";\n viewBoxWidth = 875;\n } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n top = \"⎧\";\n middle = \"⎨\";\n bottom = \"⎩\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n top = \"⎫\";\n middle = \"⎬\";\n bottom = \"⎭\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lgroup\" || delim === \"⟮\") {\n top = \"⎧\";\n bottom = \"⎩\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rgroup\" || delim === \"⟯\") {\n top = \"⎫\";\n bottom = \"⎭\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lmoustache\" || delim === \"⎰\") {\n top = \"⎧\";\n bottom = \"⎭\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rmoustache\" || delim === \"⎱\") {\n top = \"⎫\";\n bottom = \"⎩\";\n repeat = \"⎪\";\n font = \"Size4-Regular\";\n } // Get the metrics of the four sections\n var topMetrics = getMetrics(top, font, mode);\n var topHeightTotal = topMetrics.height + topMetrics.depth;\n var repeatMetrics = getMetrics(repeat, font, mode);\n var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n var bottomMetrics = getMetrics(bottom, font, mode);\n var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n var middleHeightTotal = 0;\n var middleFactor = 1;\n if (middle !== null) {\n var middleMetrics = getMetrics(middle, font, mode);\n middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n middleFactor = 2; // repeat symmetrically above and below middle\n } // Calculate the minimal height that the delimiter can have.\n // It is at least the size of the top, bottom, and optional middle combined.\n var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n // that in this context, \"center\" means that the delimiter should be\n // centered around the axis in the current style, while normally it is\n // centered around the axis in textstyle.\n var axisHeight = options.fontMetrics().axisHeight;\n if (center) {\n axisHeight *= options.sizeMultiplier;\n } // Calculate the depth\n var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n // Keep a list of the pieces of the stacked delimiter\n var stack = [];\n if (svgLabel.length > 0) {\n // Instead of stacking glyphs, create a single SVG.\n // This evades browser problems with imprecise positioning of spans.\n var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n var viewBoxHeight = Math.round(realHeightTotal * 1000);\n var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n var path = new PathNode(svgLabel, pathStr);\n var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n var svg = new SvgNode([\n path\n ], {\n \"width\": width,\n \"height\": height,\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n });\n var wrapper = buildCommon.makeSvgSpan([], [\n svg\n ], options);\n wrapper.height = viewBoxHeight / 1000;\n wrapper.style.width = width;\n wrapper.style.height = height;\n stack.push({\n type: \"elem\",\n elem: wrapper\n });\n } else {\n // Stack glyphs\n // Start by adding the bottom symbol\n stack.push(makeGlyphSpan(bottom, font, mode));\n stack.push(lap); // overlap\n if (middle === null) {\n // The middle section will be an SVG. Make it an extra 0.016em tall.\n // We'll overlap by 0.008em at top and bottom.\n var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options));\n } else {\n // When there is a middle bit, we need the middle part and two repeated\n // sections\n var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n stack.push(lap);\n stack.push(makeGlyphSpan(middle, font, mode));\n stack.push(lap);\n stack.push(makeInner(repeat, _innerHeight, options));\n } // Add the top symbol\n stack.push(lap);\n stack.push(makeGlyphSpan(top, font, mode));\n } // Finally, build the vlist\n var newOptions = options.havingBaseStyle(Style$1.TEXT);\n var inner = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: depth,\n children: stack\n }, newOptions);\n return styleWrap(buildCommon.makeSpan([\n \"delimsizing\",\n \"mult\"\n ], [\n inner\n ], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\nvar emPad = 0.08; // padding, in ems, measured in the document.\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n var pathNode = new PathNode(sqrtName, path);\n var svg = new SvgNode([\n pathNode\n ], {\n // Note: 1000:1 ratio of viewBox to document em width.\n \"width\": \"400em\",\n \"height\": makeEm(height),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n });\n return buildCommon.makeSvgSpan([\n \"hide-tail\"\n ], [\n svg\n ], options);\n};\n/**\n * Make a sqrt image of the given height,\n */ var makeSqrtImage = function makeSqrtImage(height, options) {\n // Define a newOptions that removes the effect of size changes such as \\Huge.\n // We don't pick different a height surd for \\Huge. For it, we scale up.\n var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n var sizeMultiplier = newOptions.sizeMultiplier; // default\n // The standard sqrt SVGs each have a 0.04em thick vinculum.\n // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n var span;\n var spanHeight = 0;\n var texHeight = 0;\n var viewBoxHeight = 0;\n var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n // Then browser rounding error on the parent span height will not\n // encroach on the ink of the vinculum. But that padding is not\n // included in the TeX-like `height` used for calculation of\n // vertical alignment. So texHeight = span.height < span.style.height.\n if (delim.type === \"small\") {\n // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n // 1000 unit normal glyph height.\n viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n if (height < 1.0) {\n sizeMultiplier = 1.0; // mimic a \\textfont radical\n } else if (height < 1.4) {\n sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n }\n spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.853em\";\n advanceWidth = 0.833 / sizeMultiplier; // from the font.\n } else if (delim.type === \"large\") {\n // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"1.02em\";\n advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n } else {\n // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n // We'll use a single SVG to accomplish the same thing.\n spanHeight = height + extraVinculum + emPad;\n texHeight = height + extraVinculum;\n viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.742em\";\n advanceWidth = 1.056;\n }\n span.height = texHeight;\n span.style.height = makeEm(spanHeight);\n return {\n span,\n advanceWidth,\n // Calculate the actual line width.\n // This actually should depend on the chosen font -- e.g. \\boldmath\n // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n // have thicker rules.\n ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\nvar stackLargeDelimiters = [\n \"(\",\n \"\\\\lparen\",\n \")\",\n \"\\\\rparen\",\n \"[\",\n \"\\\\lbrack\",\n \"]\",\n \"\\\\rbrack\",\n \"\\\\{\",\n \"\\\\lbrace\",\n \"\\\\}\",\n \"\\\\rbrace\",\n \"\\\\lfloor\",\n \"\\\\rfloor\",\n \"⌊\",\n \"⌋\",\n \"\\\\lceil\",\n \"\\\\rceil\",\n \"⌈\",\n \"⌉\",\n \"\\\\surd\"\n]; // delimiters that always stack\nvar stackAlwaysDelimiters = [\n \"\\\\uparrow\",\n \"\\\\downarrow\",\n \"\\\\updownarrow\",\n \"\\\\Uparrow\",\n \"\\\\Downarrow\",\n \"\\\\Updownarrow\",\n \"|\",\n \"\\\\|\",\n \"\\\\vert\",\n \"\\\\Vert\",\n \"\\\\lvert\",\n \"\\\\rvert\",\n \"\\\\lVert\",\n \"\\\\rVert\",\n \"\\\\lgroup\",\n \"\\\\rgroup\",\n \"⟮\",\n \"⟯\",\n \"\\\\lmoustache\",\n \"\\\\rmoustache\",\n \"⎰\",\n \"⎱\"\n]; // and delimiters that never stack\nvar stackNeverDelimiters = [\n \"<\",\n \">\",\n \"\\\\langle\",\n \"\\\\rangle\",\n \"/\",\n \"\\\\backslash\",\n \"\\\\lt\",\n \"\\\\gt\"\n]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\nvar sizeToMaxHeight = [\n 0,\n 1.2,\n 1.8,\n 2.4,\n 3.0\n];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */ var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n // < and > turn into \\langle and \\rangle in delimiters\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"⟨\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"⟩\") {\n delim = \"\\\\rangle\";\n } // Sized delimiters are never centered.\n if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {\n return makeLargeDelim(delim, size, false, options, mode, classes);\n } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n } else {\n throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */ // Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [\n {\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n },\n {\n type: \"small\",\n style: Style$1.SCRIPT\n },\n {\n type: \"small\",\n style: Style$1.TEXT\n },\n {\n type: \"large\",\n size: 1\n },\n {\n type: \"large\",\n size: 2\n },\n {\n type: \"large\",\n size: 3\n },\n {\n type: \"large\",\n size: 4\n }\n]; // Delimiters that always stack try the small delimiters first, then stack\nvar stackAlwaysDelimiterSequence = [\n {\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n },\n {\n type: \"small\",\n style: Style$1.SCRIPT\n },\n {\n type: \"small\",\n style: Style$1.TEXT\n },\n {\n type: \"stack\"\n }\n]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\nvar stackLargeDelimiterSequence = [\n {\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n },\n {\n type: \"small\",\n style: Style$1.SCRIPT\n },\n {\n type: \"small\",\n style: Style$1.TEXT\n },\n {\n type: \"large\",\n size: 1\n },\n {\n type: \"large\",\n size: 2\n },\n {\n type: \"large\",\n size: 3\n },\n {\n type: \"large\",\n size: 4\n },\n {\n type: \"stack\"\n }\n];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */ var delimTypeToFont = function delimTypeToFont(type) {\n if (type.type === \"small\") {\n return \"Main-Regular\";\n } else if (type.type === \"large\") {\n return \"Size\" + type.size + \"-Regular\";\n } else if (type.type === \"stack\") {\n return \"Size4-Regular\";\n } else {\n throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */ var traverseSequence = function traverseSequence(delim, height, sequence, options) {\n // Here, we choose the index we should start at in the sequences. In smaller\n // sizes (which correspond to larger numbers in style.size) we start earlier\n // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n var start = Math.min(2, 3 - options.style.size);\n for(var i = start; i < sequence.length; i++){\n if (sequence[i].type === \"stack\") {\n break;\n }\n var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n // account for the style change size.\n if (sequence[i].type === \"small\") {\n var newOptions = options.havingBaseStyle(sequence[i].style);\n heightDepth *= newOptions.sizeMultiplier;\n } // Check if the delimiter at this size works for the given height.\n if (heightDepth > height) {\n return sequence[i];\n }\n } // If we reached the end of the sequence, return the last sequence element.\n return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */ var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"⟨\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"⟩\") {\n delim = \"\\\\rangle\";\n } // Decide what sequence to use\n var sequence;\n if (utils.contains(stackNeverDelimiters, delim)) {\n sequence = stackNeverDelimiterSequence;\n } else if (utils.contains(stackLargeDelimiters, delim)) {\n sequence = stackLargeDelimiterSequence;\n } else {\n sequence = stackAlwaysDelimiterSequence;\n } // Look through the sequence\n var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n // Depending on the sequence element we decided on, call the\n // appropriate function.\n if (delimType.type === \"small\") {\n return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n } else if (delimType.type === \"large\") {\n return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n } else /* if (delimType.type === \"stack\") */ {\n return makeStackedDelim(delim, height, center, options, mode, classes);\n }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */ var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n // We always center \\left/\\right delimiters, so the axis is always shifted\n var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n var delimiterFactor = 901;\n var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n var totalHeight = Math.max(// 65536 per pt, or 655360 per em. So, the division here truncates in\n // TeX but doesn't here, producing different results. If we wanted to\n // exactly match TeX's calculation, we could do\n // Math.floor(655360 * maxDistFromAxis / 500) *\n // delimiterFactor / 655360\n // (To see the difference, compare\n // x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n // in TeX and KaTeX)\n maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n // height\n return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\nvar delimiter = {\n sqrtImage: makeSqrtImage,\n sizedDelim: makeSizedDelim,\n sizeToMaxHeight: sizeToMaxHeight,\n customSizedDelim: makeCustomSizedDelim,\n leftRightDelim: makeLeftRightDelim\n};\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n \"\\\\bigl\": {\n mclass: \"mopen\",\n size: 1\n },\n \"\\\\Bigl\": {\n mclass: \"mopen\",\n size: 2\n },\n \"\\\\biggl\": {\n mclass: \"mopen\",\n size: 3\n },\n \"\\\\Biggl\": {\n mclass: \"mopen\",\n size: 4\n },\n \"\\\\bigr\": {\n mclass: \"mclose\",\n size: 1\n },\n \"\\\\Bigr\": {\n mclass: \"mclose\",\n size: 2\n },\n \"\\\\biggr\": {\n mclass: \"mclose\",\n size: 3\n },\n \"\\\\Biggr\": {\n mclass: \"mclose\",\n size: 4\n },\n \"\\\\bigm\": {\n mclass: \"mrel\",\n size: 1\n },\n \"\\\\Bigm\": {\n mclass: \"mrel\",\n size: 2\n },\n \"\\\\biggm\": {\n mclass: \"mrel\",\n size: 3\n },\n \"\\\\Biggm\": {\n mclass: \"mrel\",\n size: 4\n },\n \"\\\\big\": {\n mclass: \"mord\",\n size: 1\n },\n \"\\\\Big\": {\n mclass: \"mord\",\n size: 2\n },\n \"\\\\bigg\": {\n mclass: \"mord\",\n size: 3\n },\n \"\\\\Bigg\": {\n mclass: \"mord\",\n size: 4\n }\n};\nvar delimiters = [\n \"(\",\n \"\\\\lparen\",\n \")\",\n \"\\\\rparen\",\n \"[\",\n \"\\\\lbrack\",\n \"]\",\n \"\\\\rbrack\",\n \"\\\\{\",\n \"\\\\lbrace\",\n \"\\\\}\",\n \"\\\\rbrace\",\n \"\\\\lfloor\",\n \"\\\\rfloor\",\n \"⌊\",\n \"⌋\",\n \"\\\\lceil\",\n \"\\\\rceil\",\n \"⌈\",\n \"⌉\",\n \"<\",\n \">\",\n \"\\\\langle\",\n \"⟨\",\n \"\\\\rangle\",\n \"⟩\",\n \"\\\\lt\",\n \"\\\\gt\",\n \"\\\\lvert\",\n \"\\\\rvert\",\n \"\\\\lVert\",\n \"\\\\rVert\",\n \"\\\\lgroup\",\n \"\\\\rgroup\",\n \"⟮\",\n \"⟯\",\n \"\\\\lmoustache\",\n \"\\\\rmoustache\",\n \"⎰\",\n \"⎱\",\n \"/\",\n \"\\\\backslash\",\n \"|\",\n \"\\\\vert\",\n \"\\\\|\",\n \"\\\\Vert\",\n \"\\\\uparrow\",\n \"\\\\Uparrow\",\n \"\\\\downarrow\",\n \"\\\\Downarrow\",\n \"\\\\updownarrow\",\n \"\\\\Updownarrow\",\n \".\"\n];\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n var symDelim = checkSymbolNodeType(delim);\n if (symDelim && utils.contains(delimiters, symDelim.text)) {\n return symDelim;\n } else if (symDelim) {\n throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n } else {\n throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n }\n}\ndefineFunction({\n type: \"delimsizing\",\n names: [\n \"\\\\bigl\",\n \"\\\\Bigl\",\n \"\\\\biggl\",\n \"\\\\Biggl\",\n \"\\\\bigr\",\n \"\\\\Bigr\",\n \"\\\\biggr\",\n \"\\\\Biggr\",\n \"\\\\bigm\",\n \"\\\\Bigm\",\n \"\\\\biggm\",\n \"\\\\Biggm\",\n \"\\\\big\",\n \"\\\\Big\",\n \"\\\\bigg\",\n \"\\\\Bigg\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"primitive\"\n ]\n },\n handler: (context, args)=>{\n var delim = checkDelimiter(args[0], context);\n return {\n type: \"delimsizing\",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options)=>{\n if (group.delim === \".\") {\n // Empty delimiters still count as elements, even though they don't\n // show anything.\n return buildCommon.makeSpan([\n group.mclass\n ]);\n } // Use delimiter.sizedDelim to generate the delimiter.\n return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [\n group.mclass\n ]);\n },\n mathmlBuilder: (group)=>{\n var children = [];\n if (group.delim !== \".\") {\n children.push(makeText(group.delim, group.mode));\n }\n var node = new mathMLTree.MathNode(\"mo\", children);\n if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n // Only some of the delimsizing functions act as fences, and they\n // return \"mopen\" or \"mclose\" mclass.\n node.setAttribute(\"fence\", \"true\");\n } else {\n // Explicitly disable fencing if it's not a fence, to override the\n // defaults.\n node.setAttribute(\"fence\", \"false\");\n }\n node.setAttribute(\"stretchy\", \"true\");\n var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n node.setAttribute(\"minsize\", size);\n node.setAttribute(\"maxsize\", size);\n return node;\n }\n});\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n }\n}\ndefineFunction({\n type: \"leftright-right\",\n names: [\n \"\\\\right\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args)=>{\n // \\left case below triggers parsing of \\right in\n // `const right = parser.parseFunction();`\n // uses this return value.\n var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n if (color && typeof color !== \"string\") {\n throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n }\n return {\n type: \"leftright-right\",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text,\n color\n };\n }\n});\ndefineFunction({\n type: \"leftright\",\n names: [\n \"\\\\left\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args)=>{\n var delim = checkDelimiter(args[0], context);\n var parser = context.parser; // Parse out the implicit body\n ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n var body = parser.parseExpression(false);\n --parser.leftrightDepth; // Check the next token\n parser.expect(\"\\\\right\", false);\n var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n return {\n type: \"leftright\",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim,\n rightColor: right.color\n };\n },\n htmlBuilder: (group, options)=>{\n assertParsed(group); // Build the inner expression\n var inner = buildExpression$1(group.body, options, true, [\n \"mopen\",\n \"mclose\"\n ]);\n var innerHeight = 0;\n var innerDepth = 0;\n var hadMiddle = false; // Calculate its height and depth\n for(var i = 0; i < inner.length; i++){\n // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n if (inner[i].isMiddle) {\n hadMiddle = true;\n } else {\n innerHeight = Math.max(inner[i].height, innerHeight);\n innerDepth = Math.max(inner[i].depth, innerDepth);\n }\n } // The size of delimiters is the same, regardless of what style we are\n // in. Thus, to correctly calculate the size of delimiter we need around\n // a group, we scale down the inner size based on the size.\n innerHeight *= options.sizeMultiplier;\n innerDepth *= options.sizeMultiplier;\n var leftDelim;\n if (group.left === \".\") {\n // Empty delimiters in \\left and \\right make null delimiter spaces.\n leftDelim = makeNullDelimiter(options, [\n \"mopen\"\n ]);\n } else {\n // Otherwise, use leftRightDelim to generate the correct sized\n // delimiter.\n leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\n \"mopen\"\n ]);\n } // Add it to the beginning of the expression\n inner.unshift(leftDelim); // Handle middle delimiters\n if (hadMiddle) {\n for(var _i = 1; _i < inner.length; _i++){\n var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n var isMiddle = middleDelim.isMiddle;\n if (isMiddle) {\n // Apply the options that were active when \\middle was called\n inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n }\n }\n }\n var rightDelim; // Same for the right delimiter, but using color specified by \\color\n if (group.right === \".\") {\n rightDelim = makeNullDelimiter(options, [\n \"mclose\"\n ]);\n } else {\n var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\n \"mclose\"\n ]);\n } // Add it to the end of the expression.\n inner.push(rightDelim);\n return buildCommon.makeSpan([\n \"minner\"\n ], inner, options);\n },\n mathmlBuilder: (group, options)=>{\n assertParsed(group);\n var inner = buildExpression(group.body, options);\n if (group.left !== \".\") {\n var leftNode = new mathMLTree.MathNode(\"mo\", [\n makeText(group.left, group.mode)\n ]);\n leftNode.setAttribute(\"fence\", \"true\");\n inner.unshift(leftNode);\n }\n if (group.right !== \".\") {\n var rightNode = new mathMLTree.MathNode(\"mo\", [\n makeText(group.right, group.mode)\n ]);\n rightNode.setAttribute(\"fence\", \"true\");\n if (group.rightColor) {\n rightNode.setAttribute(\"mathcolor\", group.rightColor);\n }\n inner.push(rightNode);\n }\n return makeRow(inner);\n }\n});\ndefineFunction({\n type: \"middle\",\n names: [\n \"\\\\middle\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args)=>{\n var delim = checkDelimiter(args[0], context);\n if (!context.parser.leftrightDepth) {\n throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n }\n return {\n type: \"middle\",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options)=>{\n var middleDelim;\n if (group.delim === \".\") {\n middleDelim = makeNullDelimiter(options, []);\n } else {\n middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n var isMiddle = {\n delim: group.delim,\n options\n }; // Property `isMiddle` not defined on `span`. It is only used in\n // this file above.\n // TODO: Fix this violation of the `span` type and possibly rename\n // things since `isMiddle` sounds like a boolean, but is a struct.\n // $FlowFixMe\n middleDelim.isMiddle = isMiddle;\n }\n return middleDelim;\n },\n mathmlBuilder: (group, options)=>{\n // A Firefox \\middle will stretch a character vertically only if it\n // is in the fence part of the operator dictionary at:\n // https://www.w3.org/TR/MathML3/appendixc.html.\n // So we need to avoid U+2223 and use plain \"|\" instead.\n var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n var middleNode = new mathMLTree.MathNode(\"mo\", [\n textNode\n ]);\n middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each <mo> element.\n // \\middle should get delimiter spacing instead.\n middleNode.setAttribute(\"lspace\", \"0.05em\");\n middleNode.setAttribute(\"rspace\", \"0.05em\");\n return middleNode;\n }\n});\nvar htmlBuilder$7 = (group, options)=>{\n // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n var label = group.label.slice(1);\n var scale = options.sizeMultiplier;\n var img;\n var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n // depending on whether the subject is wider than it is tall, or vice versa.\n // We don't know the width of a group, so as a proxy, we test if\n // the subject is a single character. This captures most of the\n // subjects that should get the \"tall\" treatment.\n var isSingleChar = utils.isCharacterBox(group.body);\n if (label === \"sout\") {\n img = buildCommon.makeSpan([\n \"stretchy\",\n \"sout\"\n ]);\n img.height = options.fontMetrics().defaultRuleThickness / scale;\n imgShift = -0.5 * options.fontMetrics().xHeight;\n } else if (label === \"phase\") {\n // Set a couple of dimensions from the steinmetz package.\n var lineWeight = calculateSize({\n number: 0.6,\n unit: \"pt\"\n }, options);\n var clearance = calculateSize({\n number: 0.35,\n unit: \"ex\"\n }, options); // Prevent size changes like \\Huge from affecting line thickness\n var newOptions = options.havingBaseSizing();\n scale = scale / newOptions.sizeMultiplier;\n var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n var path = phasePath(viewBoxHeight);\n var svgNode = new SvgNode([\n new PathNode(\"phase\", path)\n ], {\n \"width\": \"400em\",\n \"height\": makeEm(viewBoxHeight / 1000),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n }); // Wrap it in a span with overflow: hidden.\n img = buildCommon.makeSvgSpan([\n \"hide-tail\"\n ], [\n svgNode\n ], options);\n img.style.height = makeEm(angleHeight);\n imgShift = inner.depth + lineWeight + clearance;\n } else {\n // Add horizontal padding\n if (/cancel/.test(label)) {\n if (!isSingleChar) {\n inner.classes.push(\"cancel-pad\");\n }\n } else if (label === \"angl\") {\n inner.classes.push(\"anglpad\");\n } else {\n inner.classes.push(\"boxpad\");\n } // Add vertical padding\n var topPad = 0;\n var bottomPad = 0;\n var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n if (/box/.test(label)) {\n ruleThickness = Math.max(options.fontMetrics().fboxrule, options.minRuleThickness // User override.\n );\n topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n bottomPad = topPad;\n } else if (label === \"angl\") {\n ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n topPad = 4 * ruleThickness; // gap = 3 × line, plus the line itself.\n bottomPad = Math.max(0, 0.25 - inner.depth);\n } else {\n topPad = isSingleChar ? 0.2 : 0;\n bottomPad = topPad;\n }\n img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n if (/fbox|boxed|fcolorbox/.test(label)) {\n img.style.borderStyle = \"solid\";\n img.style.borderWidth = makeEm(ruleThickness);\n } else if (label === \"angl\" && ruleThickness !== 0.049) {\n img.style.borderTopWidth = makeEm(ruleThickness);\n img.style.borderRightWidth = makeEm(ruleThickness);\n }\n imgShift = inner.depth + bottomPad;\n if (group.backgroundColor) {\n img.style.backgroundColor = group.backgroundColor;\n if (group.borderColor) {\n img.style.borderColor = group.borderColor;\n }\n }\n }\n var vlist;\n if (group.backgroundColor) {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: img,\n shift: imgShift\n },\n {\n type: \"elem\",\n elem: inner,\n shift: 0\n }\n ]\n }, options);\n } else {\n var classes = /cancel|phase/.test(label) ? [\n \"svg-align\"\n ] : [];\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: inner,\n shift: 0\n },\n {\n type: \"elem\",\n elem: img,\n shift: imgShift,\n wrapperClasses: classes\n }\n ]\n }, options);\n }\n if (/cancel/.test(label)) {\n // The cancel package documentation says that cancel lines add their height\n // to the expression, but tests show that isn't how it actually works.\n vlist.height = inner.height;\n vlist.depth = inner.depth;\n }\n if (/cancel/.test(label) && !isSingleChar) {\n // cancel does not create horiz space for its line extension.\n return buildCommon.makeSpan([\n \"mord\",\n \"cancel-lap\"\n ], [\n vlist\n ], options);\n } else {\n return buildCommon.makeSpan([\n \"mord\"\n ], [\n vlist\n ], options);\n }\n};\nvar mathmlBuilder$6 = (group, options)=>{\n var fboxsep = 0;\n var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [\n buildGroup(group.body, options)\n ]);\n switch(group.label){\n case \"\\\\cancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike\");\n break;\n case \"\\\\bcancel\":\n node.setAttribute(\"notation\", \"downdiagonalstrike\");\n break;\n case \"\\\\phase\":\n node.setAttribute(\"notation\", \"phasorangle\");\n break;\n case \"\\\\sout\":\n node.setAttribute(\"notation\", \"horizontalstrike\");\n break;\n case \"\\\\fbox\":\n node.setAttribute(\"notation\", \"box\");\n break;\n case \"\\\\angl\":\n node.setAttribute(\"notation\", \"actuarial\");\n break;\n case \"\\\\fcolorbox\":\n case \"\\\\colorbox\":\n // <menclose> doesn't have a good notation option. So use <mpadded>\n // instead. Set some attributes that come included with <menclose>.\n fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n node.setAttribute(\"voffset\", fboxsep + \"pt\");\n if (group.label === \"\\\\fcolorbox\") {\n var thk = Math.max(options.fontMetrics().fboxrule, options.minRuleThickness // user override\n );\n node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n }\n break;\n case \"\\\\xcancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n break;\n }\n if (group.backgroundColor) {\n node.setAttribute(\"mathbackground\", group.backgroundColor);\n }\n return node;\n};\ndefineFunction({\n type: \"enclose\",\n names: [\n \"\\\\colorbox\"\n ],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\n \"color\",\n \"text\"\n ]\n },\n handler (_ref, args, optArgs) {\n var { parser, funcName } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\n \"\\\\fcolorbox\"\n ],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: [\n \"color\",\n \"color\",\n \"text\"\n ]\n },\n handler (_ref2, args, optArgs) {\n var { parser, funcName } = _ref2;\n var borderColor = assertNodeType(args[0], \"color-token\").color;\n var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n var body = args[2];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\n \"\\\\fbox\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"hbox\"\n ],\n allowedInText: true\n },\n handler (_ref3, args) {\n var { parser } = _ref3;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\fbox\",\n body: args[0]\n };\n }\n});\ndefineFunction({\n type: \"enclose\",\n names: [\n \"\\\\cancel\",\n \"\\\\bcancel\",\n \"\\\\xcancel\",\n \"\\\\sout\",\n \"\\\\phase\"\n ],\n props: {\n numArgs: 1\n },\n handler (_ref4, args) {\n var { parser, funcName } = _ref4;\n var body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\n \"\\\\angl\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"hbox\"\n ],\n allowedInText: false\n },\n handler (_ref5, args) {\n var { parser } = _ref5;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\angl\",\n body: args[0]\n };\n }\n});\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */ var _environments = {};\nfunction defineEnvironment(_ref) {\n var { type, names, props, handler, htmlBuilder, mathmlBuilder } = _ref;\n // Set default values of environments.\n var data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n for(var i = 0; i < names.length; ++i){\n // TODO: The value type of _environments should be a type union of all\n // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n // an existential type.\n _environments[names[i]] = data;\n }\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */ var _macros = {}; // This function might one day accept an additional argument and do more things.\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n var hlineInfo = [];\n parser.consumeSpaces();\n var nxt = parser.fetch().text;\n if (nxt === \"\\\\relax\") {\n // \\relax is an artifact of the \\cr macro below\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n while(nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\"){\n parser.consume();\n hlineInfo.push(nxt === \"\\\\hdashline\");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n return hlineInfo;\n}\nvar validateAmsEnvironmentContext = (context)=>{\n var settings = context.parser.settings;\n if (!settings.displayMode) {\n throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\nfunction getAutoTag(name) {\n if (name.indexOf(\"ed\") === -1) {\n return name.indexOf(\"*\") === -1;\n } // return undefined;\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */ function parseArray(parser, _ref, style) {\n var { hskipBeforeAndAfter, addJot, cols, arraystretch, colSeparationType, autoTag, singleRow, emptySingleRow, maxNumCols, leqno } = _ref;\n parser.gullet.beginGroup();\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n } // Get current arraystretch if it's not set by the environment\n if (!arraystretch) {\n var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n if (stretch == null) {\n // Default \\arraystretch from lttab.dtx\n arraystretch = 1;\n } else {\n arraystretch = parseFloat(stretch);\n if (!arraystretch || arraystretch < 0) {\n throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n }\n }\n } // Start group for first cell\n parser.gullet.beginGroup();\n var row = [];\n var body = [\n row\n ];\n var rowGaps = [];\n var hLinesBeforeRow = [];\n var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n }\n }\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n tags.push(parser.subparse([\n new Token(\"\\\\df@tag\")\n ]));\n parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n } else {\n tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n }\n }\n }\n beginRow(); // Test for \\hline at the top of the array.\n hLinesBeforeRow.push(getHLines(parser));\n while(true){\n // eslint-disable-line no-constant-condition\n // Parse each cell in its own group (namespace)\n var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n cell = {\n type: \"ordgroup\",\n mode: parser.mode,\n body: cell\n };\n if (style) {\n cell = {\n type: \"styling\",\n mode: parser.mode,\n style,\n body: [\n cell\n ]\n };\n }\n row.push(cell);\n var next = parser.fetch().text;\n if (next === \"&\") {\n if (maxNumCols && row.length === maxNumCols) {\n if (singleRow || colSeparationType) {\n // {equation} or {split}\n throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n } else {\n // {array} environment\n parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n }\n }\n parser.consume();\n } else if (next === \"\\\\end\") {\n endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it's the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n break;\n } else if (next === \"\\\\\\\\\") {\n parser.consume();\n var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n if (parser.gullet.future().text !== \" \") {\n size = parser.parseSizeGroup(true);\n }\n rowGaps.push(size ? size.value : null);\n endRow(); // check for \\hline(s) following the row separator\n hLinesBeforeRow.push(getHLines(parser));\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n } // End cell group\n parser.gullet.endGroup(); // End array group defining \\cr\n parser.gullet.endGroup();\n return {\n type: \"array\",\n mode: parser.mode,\n addJot,\n arraystretch,\n body,\n cols,\n rowGaps,\n hskipBeforeAndAfter,\n hLinesBeforeRow,\n colSeparationType,\n tags,\n leqno\n };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\nfunction dCellStyle(envName) {\n if (envName.slice(0, 1) === \"d\") {\n return \"display\";\n } else {\n return \"text\";\n }\n}\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n var r;\n var c;\n var nr = group.body.length;\n var hLinesBeforeRow = group.hLinesBeforeRow;\n var nc = 0;\n var body = new Array(nr);\n var hlines = [];\n var ruleThickness = Math.max(options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n ); // Horizontal spacing\n var pt = 1 / options.fontMetrics().ptPerEm;\n var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n if (group.colSeparationType && group.colSeparationType === \"small\") {\n // We're in a {smallmatrix}. Default column space is \\thickspace,\n // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n // But that needs adjustment because LaTeX applies \\scriptstyle to the\n // entire array, including the colspace, but this function applies\n // \\scriptstyle only inside each element.\n var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n } // Vertical spacing\n var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n number: 3,\n unit: \"ex\"\n }, options) : 12 * pt; // see size10.clo\n // Default \\jot from ltmath.dtx\n // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n var jot = 3 * pt;\n var arrayskip = group.arraystretch * baselineskip;\n var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n function setHLinePos(hlinesInGap) {\n for(var i = 0; i < hlinesInGap.length; ++i){\n if (i > 0) {\n totalHeight += 0.25;\n }\n hlines.push({\n pos: totalHeight,\n isDashed: hlinesInGap[i]\n });\n }\n }\n setHLinePos(hLinesBeforeRow[0]);\n for(r = 0; r < group.body.length; ++r){\n var inrow = group.body[r];\n var height = arstrutHeight; // \\@array adds an \\@arstrut\n var depth = arstrutDepth; // to each tow (via the template)\n if (nc < inrow.length) {\n nc = inrow.length;\n }\n var outrow = new Array(inrow.length);\n for(c = 0; c < inrow.length; ++c){\n var elt = buildGroup$1(inrow[c], options);\n if (depth < elt.depth) {\n depth = elt.depth;\n }\n if (height < elt.height) {\n height = elt.height;\n }\n outrow[c] = elt;\n }\n var rowGap = group.rowGaps[r];\n var gap = 0;\n if (rowGap) {\n gap = calculateSize(rowGap, options);\n if (gap > 0) {\n // \\@argarraycr\n gap += arstrutDepth;\n if (depth < gap) {\n depth = gap; // \\@xargarraycr\n }\n gap = 0;\n }\n } // In AMS multiline environments such as aligned and gathered, rows\n // correspond to lines that have additional \\jot added to the\n // \\baselineskip via \\openup.\n if (group.addJot) {\n depth += jot;\n }\n outrow.height = height;\n outrow.depth = depth;\n totalHeight += height;\n outrow.pos = totalHeight;\n totalHeight += depth + gap; // \\@yargarraycr\n body[r] = outrow; // Set a position for \\hline(s), if any.\n setHLinePos(hLinesBeforeRow[r + 1]);\n }\n var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n var colDescriptions = group.cols || [];\n var cols = [];\n var colSep;\n var colDescrNum;\n var tagSpans = [];\n if (group.tags && group.tags.some((tag)=>tag)) {\n // An environment with manual tags and/or automatic equation numbers.\n // Create node(s), the latter of which trigger CSS counter increment.\n for(r = 0; r < nr; ++r){\n var rw = body[r];\n var shift = rw.pos - offset;\n var tag = group.tags[r];\n var tagSpan = void 0;\n if (tag === true) {\n // automatic numbering\n tagSpan = buildCommon.makeSpan([\n \"eqn-num\"\n ], [], options);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagSpan = buildCommon.makeSpan([], [], options);\n } else {\n // manual \\tag\n tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n }\n tagSpan.depth = rw.depth;\n tagSpan.height = rw.height;\n tagSpans.push({\n type: \"elem\",\n elem: tagSpan,\n shift\n });\n }\n }\n for(c = 0, colDescrNum = 0; // descriptions, so trailing separators don't get lost.\n c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum){\n var colDescr = colDescriptions[colDescrNum] || {};\n var firstSeparator = true;\n while(colDescr.type === \"separator\"){\n // If there is more than one separator in a row, add a space\n // between them.\n if (!firstSeparator) {\n colSep = buildCommon.makeSpan([\n \"arraycolsep\"\n ], []);\n colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n cols.push(colSep);\n }\n if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n var separator = buildCommon.makeSpan([\n \"vertical-separator\"\n ], [], options);\n separator.style.height = makeEm(totalHeight);\n separator.style.borderRightWidth = makeEm(ruleThickness);\n separator.style.borderRightStyle = lineType;\n separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n var _shift = totalHeight - offset;\n if (_shift) {\n separator.style.verticalAlign = makeEm(-_shift);\n }\n cols.push(separator);\n } else {\n throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n }\n colDescrNum++;\n colDescr = colDescriptions[colDescrNum] || {};\n firstSeparator = false;\n }\n if (c >= nc) {\n continue;\n }\n var sepwidth = void 0;\n if (c > 0 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\n \"arraycolsep\"\n ], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n var col = [];\n for(r = 0; r < nr; ++r){\n var row = body[r];\n var elem = row[c];\n if (!elem) {\n continue;\n }\n var _shift2 = row.pos - offset;\n elem.depth = row.depth;\n elem.height = row.height;\n col.push({\n type: \"elem\",\n elem: elem,\n shift: _shift2\n });\n }\n col = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: col\n }, options);\n col = buildCommon.makeSpan([\n \"col-align-\" + (colDescr.align || \"c\")\n ], [\n col\n ]);\n cols.push(col);\n if (c < nc - 1 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\n \"arraycolsep\"\n ], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n }\n body = buildCommon.makeSpan([\n \"mtable\"\n ], cols); // Add \\hline(s), if any.\n if (hlines.length > 0) {\n var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n var vListElems = [\n {\n type: \"elem\",\n elem: body,\n shift: 0\n }\n ];\n while(hlines.length > 0){\n var hline = hlines.pop();\n var lineShift = hline.pos - offset;\n if (hline.isDashed) {\n vListElems.push({\n type: \"elem\",\n elem: dashes,\n shift: lineShift\n });\n } else {\n vListElems.push({\n type: \"elem\",\n elem: line,\n shift: lineShift\n });\n }\n }\n body = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vListElems\n }, options);\n }\n if (tagSpans.length === 0) {\n return buildCommon.makeSpan([\n \"mord\"\n ], [\n body\n ], options);\n } else {\n var eqnNumCol = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: tagSpans\n }, options);\n eqnNumCol = buildCommon.makeSpan([\n \"tag\"\n ], [\n eqnNumCol\n ], options);\n return buildCommon.makeFragment([\n body,\n eqnNumCol\n ]);\n }\n};\nvar alignMap = {\n c: \"center \",\n l: \"left \",\n r: \"right \"\n};\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n var tbl = [];\n var glue = new mathMLTree.MathNode(\"mtd\", [], [\n \"mtr-glue\"\n ]);\n var tag = new mathMLTree.MathNode(\"mtd\", [], [\n \"mml-eqn-num\"\n ]);\n for(var i = 0; i < group.body.length; i++){\n var rw = group.body[i];\n var row = [];\n for(var j = 0; j < rw.length; j++){\n row.push(new mathMLTree.MathNode(\"mtd\", [\n buildGroup(rw[j], options)\n ]));\n }\n if (group.tags && group.tags[i]) {\n row.unshift(glue);\n row.push(glue);\n if (group.leqno) {\n row.unshift(tag);\n } else {\n row.push(tag);\n }\n }\n tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n }\n var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n // array lines by setting attributes on the table element.\n // Set the row spacing. In MathML, we specify a gap distance.\n // We do not use rowGap[] because MathML automatically increases\n // cell height with the height/depth of the element content.\n // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n // We simulate this by adding (arraystretch - 1)em to the gap. This\n // does a reasonable job of adjusting arrays containing 1 em tall content.\n // The 0.16 and 0.09 values are found empirically. They produce an array\n // similar to LaTeX and in which content does not interfere with \\hlines.\n var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n // To place a line on an edge we'll use <menclose>, if necessary.\n var menclose = \"\";\n var align = \"\";\n if (group.cols && group.cols.length > 0) {\n // Find column alignment, column spacing, and vertical lines.\n var cols = group.cols;\n var columnLines = \"\";\n var prevTypeWasAlign = false;\n var iStart = 0;\n var iEnd = cols.length;\n if (cols[0].type === \"separator\") {\n menclose += \"top \";\n iStart = 1;\n }\n if (cols[cols.length - 1].type === \"separator\") {\n menclose += \"bottom \";\n iEnd -= 1;\n }\n for(var _i = iStart; _i < iEnd; _i++){\n if (cols[_i].type === \"align\") {\n align += alignMap[cols[_i].align];\n if (prevTypeWasAlign) {\n columnLines += \"none \";\n }\n prevTypeWasAlign = true;\n } else if (cols[_i].type === \"separator\") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n prevTypeWasAlign = false;\n }\n }\n }\n table.setAttribute(\"columnalign\", align.trim());\n if (/[sd]/.test(columnLines)) {\n table.setAttribute(\"columnlines\", columnLines.trim());\n }\n } // Set column spacing.\n if (group.colSeparationType === \"align\") {\n var _cols = group.cols || [];\n var spacing = \"\";\n for(var _i2 = 1; _i2 < _cols.length; _i2++){\n spacing += _i2 % 2 ? \"0em \" : \"1em \";\n }\n table.setAttribute(\"columnspacing\", spacing.trim());\n } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n table.setAttribute(\"columnspacing\", \"0em\");\n } else if (group.colSeparationType === \"small\") {\n table.setAttribute(\"columnspacing\", \"0.2778em\");\n } else if (group.colSeparationType === \"CD\") {\n table.setAttribute(\"columnspacing\", \"0.5em\");\n } else {\n table.setAttribute(\"columnspacing\", \"1em\");\n } // Address \\hline and \\hdashline\n var rowLines = \"\";\n var hlines = group.hLinesBeforeRow;\n menclose += hlines[0].length > 0 ? \"left \" : \"\";\n menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n for(var _i3 = 1; _i3 < hlines.length - 1; _i3++){\n rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n : hlines[_i3][0] ? \"dashed \" : \"solid \";\n }\n if (/[sd]/.test(rowLines)) {\n table.setAttribute(\"rowlines\", rowLines.trim());\n }\n if (menclose !== \"\") {\n table = new mathMLTree.MathNode(\"menclose\", [\n table\n ]);\n table.setAttribute(\"notation\", menclose.trim());\n }\n if (group.arraystretch && group.arraystretch < 1) {\n // A small array. Wrap in scriptstyle so row gap is not too large.\n table = new mathMLTree.MathNode(\"mstyle\", [\n table\n ]);\n table.setAttribute(\"scriptlevel\", \"1\");\n }\n return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\nvar alignedHandler = function alignedHandler(context, args) {\n if (context.envName.indexOf(\"ed\") === -1) {\n validateAmsEnvironmentContext(context);\n }\n var cols = [];\n var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n var isSplit = context.envName === \"split\";\n var res = parseArray(context.parser, {\n cols,\n addJot: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n emptySingleRow: true,\n colSeparationType: separationType,\n maxNumCols: isSplit ? 2 : undefined,\n leqno: context.parser.settings.leqno\n }, \"display\"); // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn't exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row (\"aligned\" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath's \\start@aligned.\n var numMaths;\n var numCols = 0;\n var emptyGroup = {\n type: \"ordgroup\",\n mode: context.mode,\n body: []\n };\n if (args[0] && args[0].type === \"ordgroup\") {\n var arg0 = \"\";\n for(var i = 0; i < args[0].body.length; i++){\n var textord = assertNodeType(args[0].body[i], \"textord\");\n arg0 += textord.text;\n }\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n var isAligned = !numCols;\n res.body.forEach(function(row) {\n for(var _i4 = 1; _i4 < row.length; _i4 += 2){\n // Modify ordgroup node within styling node\n var styling = assertNodeType(row[_i4], \"styling\");\n var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n ordgroup.body.unshift(emptyGroup);\n }\n if (!isAligned) {\n // Case 1\n var curMaths = row.length / 2;\n if (numMaths < curMaths) {\n throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n }); // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n for(var _i5 = 0; _i5 < numCols; ++_i5){\n var align = \"r\";\n var pregap = 0;\n if (_i5 % 2 === 1) {\n align = \"l\";\n } else if (_i5 > 0 && isAligned) {\n // \"aligned\" mode.\n pregap = 1; // add one \\quad\n }\n cols[_i5] = {\n type: \"align\",\n align: align,\n pregap: pregap,\n postgap: 0\n };\n }\n res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"array\",\n \"darray\"\n ],\n props: {\n numArgs: 1\n },\n handler (context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser's\n // parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n // - The argument is a bare symbol node.\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [\n args[0]\n ] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function(nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text;\n if (\"lcr\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n } else if (ca === \"|\") {\n return {\n type: \"separator\",\n separator: \"|\"\n };\n } else if (ca === \":\") {\n return {\n type: \"separator\",\n separator: \":\"\n };\n }\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n var res = {\n cols,\n hskipBeforeAndAfter: true,\n // \\@preamble in lttab.dtx\n maxNumCols: cols.length\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"matrix\",\n \"pmatrix\",\n \"bmatrix\",\n \"Bmatrix\",\n \"vmatrix\",\n \"Vmatrix\",\n \"matrix*\",\n \"pmatrix*\",\n \"bmatrix*\",\n \"Bmatrix*\",\n \"vmatrix*\",\n \"Vmatrix*\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n var delimiters = {\n \"matrix\": null,\n \"pmatrix\": [\n \"(\",\n \")\"\n ],\n \"bmatrix\": [\n \"[\",\n \"]\"\n ],\n \"Bmatrix\": [\n \"\\\\{\",\n \"\\\\}\"\n ],\n \"vmatrix\": [\n \"|\",\n \"|\"\n ],\n \"Vmatrix\": [\n \"\\\\Vert\",\n \"\\\\Vert\"\n ]\n }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n var colAlign = \"c\";\n var payload = {\n hskipBeforeAndAfter: false,\n cols: [\n {\n type: \"align\",\n align: colAlign\n }\n ]\n };\n if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n // It's one of the mathtools starred functions.\n // Parse the optional alignment argument.\n var parser = context.parser;\n parser.consumeSpaces();\n if (parser.fetch().text === \"[\") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n if (\"lcr\".indexOf(colAlign) === -1) {\n throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n }\n parser.consume();\n parser.consumeSpaces();\n parser.expect(\"]\");\n parser.consume();\n payload.cols = [\n {\n type: \"align\",\n align: colAlign\n }\n ];\n }\n }\n var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n var numCols = Math.max(0, ...res.body.map((row)=>row.length));\n res.cols = new Array(numCols).fill({\n type: \"align\",\n align: colAlign\n });\n return delimiters ? {\n type: \"leftright\",\n mode: context.mode,\n body: [\n res\n ],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n } : res;\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\n \"smallmatrix\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n var payload = {\n arraystretch: 0.5\n };\n var res = parseArray(context.parser, payload, \"script\");\n res.colSeparationType = \"small\";\n return res;\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\n \"subarray\"\n ],\n props: {\n numArgs: 1\n },\n handler (context, args) {\n // Parsing of {subarray} is similar to {array}\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [\n args[0]\n ] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function(nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n if (\"lc\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n }\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n if (cols.length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n var res = {\n cols,\n hskipBeforeAndAfter: false,\n arraystretch: 0.5\n };\n res = parseArray(context.parser, res, \"script\");\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n return res;\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} … \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"cases\",\n \"dcases\",\n \"rcases\",\n \"drcases\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n var payload = {\n arraystretch: 1.2,\n cols: [\n {\n type: \"align\",\n align: \"l\",\n pregap: 0,\n // TODO(kevinb) get the current style.\n // For now we use the metrics for TEXT style which is what we were\n // doing before. Before attempting to get the current style we\n // should look at TeX's behavior especially for \\over and matrices.\n postgap: 1.0\n },\n {\n type: \"align\",\n align: \"l\",\n pregap: 0,\n postgap: 0\n }\n ]\n };\n var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: \"leftright\",\n mode: context.mode,\n body: [\n res\n ],\n left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n rightColor: undefined\n };\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"align\",\n \"align*\",\n \"aligned\",\n \"split\"\n ],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"gathered\",\n \"gather\",\n \"gather*\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n if (utils.contains([\n \"gather\",\n \"gather*\"\n ], context.envName)) {\n validateAmsEnvironmentContext(context);\n }\n var res = {\n cols: [\n {\n type: \"align\",\n align: \"c\"\n }\n ],\n addJot: true,\n colSeparationType: \"gather\",\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\ndefineEnvironment({\n type: \"array\",\n names: [\n \"alignat\",\n \"alignat*\",\n \"alignedat\"\n ],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\n \"equation\",\n \"equation*\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n validateAmsEnvironmentContext(context);\n var res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\n \"CD\"\n ],\n props: {\n numArgs: 0\n },\n handler (context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\n \"\\\\hline\",\n \"\\\\hdashline\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n handler (context, args) {\n throw new ParseError(context.funcName + \" valid only within array environment\");\n }\n});\nvar environments = _environments;\n// defineEnvironment definitions.\ndefineFunction({\n type: \"environment\",\n names: [\n \"\\\\begin\",\n \"\\\\end\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"text\"\n ]\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n var nameGroup = args[0];\n if (nameGroup.type !== \"ordgroup\") {\n throw new ParseError(\"Invalid environment name\", nameGroup);\n }\n var envName = \"\";\n for(var i = 0; i < nameGroup.body.length; ++i){\n envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n }\n if (funcName === \"\\\\begin\") {\n // begin...end is similar to left...right\n if (!environments.hasOwnProperty(envName)) {\n throw new ParseError(\"No such environment: \" + envName, nameGroup);\n } // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n var env = environments[envName];\n var { args: _args, optArgs } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n var context = {\n mode: parser.mode,\n envName,\n parser\n };\n var result = env.handler(context, _args, optArgs);\n parser.expect(\"\\\\end\", false);\n var endNameToken = parser.nextToken;\n var end = assertNodeType(parser.parseFunction(), \"environment\");\n if (end.name !== envName) {\n throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n return result;\n }\n return {\n type: \"environment\",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n});\n// TODO(kevinb): implement \\\\sl and \\\\sc\nvar htmlBuilder$5 = (group, options)=>{\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup$1(group.body, newOptions);\n};\nvar mathmlBuilder$4 = (group, options)=>{\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup(group.body, newOptions);\n};\nvar fontAliases = {\n \"\\\\Bbb\": \"\\\\mathbb\",\n \"\\\\bold\": \"\\\\mathbf\",\n \"\\\\frak\": \"\\\\mathfrak\",\n \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n type: \"font\",\n names: [\n \"\\\\mathrm\",\n \"\\\\mathit\",\n \"\\\\mathbf\",\n \"\\\\mathnormal\",\n \"\\\\mathbb\",\n \"\\\\mathcal\",\n \"\\\\mathfrak\",\n \"\\\\mathscr\",\n \"\\\\mathsf\",\n \"\\\\mathtt\",\n \"\\\\Bbb\",\n \"\\\\bold\",\n \"\\\\frak\"\n ],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var body = normalizeArgument(args[0]);\n var func = funcName;\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n return {\n type: \"font\",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n type: \"mclass\",\n names: [\n \"\\\\boldsymbol\",\n \"\\\\bm\"\n ],\n props: {\n numArgs: 1\n },\n handler: (_ref2, args)=>{\n var { parser } = _ref2;\n var body = args[0];\n var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n // argument's bin|rel|ord status\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(body),\n body: [\n {\n type: \"font\",\n mode: parser.mode,\n font: \"boldsymbol\",\n body\n }\n ],\n isCharacterBox: isCharacterBox\n };\n }\n}); // Old font changing functions\ndefineFunction({\n type: \"font\",\n names: [\n \"\\\\rm\",\n \"\\\\sf\",\n \"\\\\tt\",\n \"\\\\bf\",\n \"\\\\it\",\n \"\\\\cal\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref3, args)=>{\n var { parser, funcName, breakOnTokenText } = _ref3;\n var { mode } = parser;\n var body = parser.parseExpression(true, breakOnTokenText);\n var style = \"math\" + funcName.slice(1);\n return {\n type: \"font\",\n mode: mode,\n font: style,\n body: {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n }\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\nvar adjustStyle = (size, originalStyle)=>{\n // Figure out what style this fraction should be in based on the\n // function used\n var style = originalStyle;\n if (size === \"display\") {\n // Get display style as a default.\n // If incoming style is sub/sup, use style.text() to get correct size.\n style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n // We're in a \\tfrac but incoming style is displaystyle, so:\n style = Style$1.TEXT;\n } else if (size === \"script\") {\n style = Style$1.SCRIPT;\n } else if (size === \"scriptscript\") {\n style = Style$1.SCRIPTSCRIPT;\n }\n return style;\n};\nvar htmlBuilder$4 = (group, options)=>{\n // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n var style = adjustStyle(group.size, options.style);\n var nstyle = style.fracNum();\n var dstyle = style.fracDen();\n var newOptions;\n newOptions = options.havingStyle(nstyle);\n var numerm = buildGroup$1(group.numer, newOptions, options);\n if (group.continued) {\n // \\cfrac inserts a \\strut into the numerator.\n // Get \\strut dimensions from TeXbook page 353.\n var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n }\n newOptions = options.havingStyle(dstyle);\n var denomm = buildGroup$1(group.denom, newOptions, options);\n var rule;\n var ruleWidth;\n var ruleSpacing;\n if (group.hasBarLine) {\n if (group.barSize) {\n ruleWidth = calculateSize(group.barSize, options);\n rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n } else {\n rule = buildCommon.makeLineSpan(\"frac-line\", options);\n }\n ruleWidth = rule.height;\n ruleSpacing = rule.height;\n } else {\n rule = null;\n ruleWidth = 0;\n ruleSpacing = options.fontMetrics().defaultRuleThickness;\n } // Rule 15b\n var numShift;\n var clearance;\n var denomShift;\n if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n numShift = options.fontMetrics().num1;\n if (ruleWidth > 0) {\n clearance = 3 * ruleSpacing;\n } else {\n clearance = 7 * ruleSpacing;\n }\n denomShift = options.fontMetrics().denom1;\n } else {\n if (ruleWidth > 0) {\n numShift = options.fontMetrics().num2;\n clearance = ruleSpacing;\n } else {\n numShift = options.fontMetrics().num3;\n clearance = 3 * ruleSpacing;\n }\n denomShift = options.fontMetrics().denom2;\n }\n var frac;\n if (!rule) {\n // Rule 15c\n var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n if (candidateClearance < clearance) {\n numShift += 0.5 * (clearance - candidateClearance);\n denomShift += 0.5 * (clearance - candidateClearance);\n }\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n },\n {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }\n ]\n }, options);\n } else {\n // Rule 15d\n var axisHeight = options.fontMetrics().axisHeight;\n if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n }\n if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n }\n var midShift = -(axisHeight - 0.5 * ruleWidth);\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n },\n {\n type: \"elem\",\n elem: rule,\n shift: midShift\n },\n {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }\n ]\n }, options);\n } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n // account for the possible size change here.\n newOptions = options.havingStyle(style);\n frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n var delimSize;\n if (style.size === Style$1.DISPLAY.size) {\n delimSize = options.fontMetrics().delim1;\n } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n } else {\n delimSize = options.fontMetrics().delim2;\n }\n var leftDelim;\n var rightDelim;\n if (group.leftDelim == null) {\n leftDelim = makeNullDelimiter(options, [\n \"mopen\"\n ]);\n } else {\n leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\n \"mopen\"\n ]);\n }\n if (group.continued) {\n rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n } else if (group.rightDelim == null) {\n rightDelim = makeNullDelimiter(options, [\n \"mclose\"\n ]);\n } else {\n rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\n \"mclose\"\n ]);\n }\n return buildCommon.makeSpan([\n \"mord\"\n ].concat(newOptions.sizingClasses(options)), [\n leftDelim,\n buildCommon.makeSpan([\n \"mfrac\"\n ], [\n frac\n ]),\n rightDelim\n ], options);\n};\nvar mathmlBuilder$3 = (group, options)=>{\n var node = new mathMLTree.MathNode(\"mfrac\", [\n buildGroup(group.numer, options),\n buildGroup(group.denom, options)\n ]);\n if (!group.hasBarLine) {\n node.setAttribute(\"linethickness\", \"0px\");\n } else if (group.barSize) {\n var ruleWidth = calculateSize(group.barSize, options);\n node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n }\n var style = adjustStyle(group.size, options.style);\n if (style.size !== options.style.size) {\n node = new mathMLTree.MathNode(\"mstyle\", [\n node\n ]);\n var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n node.setAttribute(\"displaystyle\", isDisplay);\n node.setAttribute(\"scriptlevel\", \"0\");\n }\n if (group.leftDelim != null || group.rightDelim != null) {\n var withDelims = [];\n if (group.leftDelim != null) {\n var leftOp = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))\n ]);\n leftOp.setAttribute(\"fence\", \"true\");\n withDelims.push(leftOp);\n }\n withDelims.push(node);\n if (group.rightDelim != null) {\n var rightOp = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))\n ]);\n rightOp.setAttribute(\"fence\", \"true\");\n withDelims.push(rightOp);\n }\n return makeRow(withDelims);\n }\n return node;\n};\ndefineFunction({\n type: \"genfrac\",\n names: [\n \"\\\\dfrac\",\n \"\\\\frac\",\n \"\\\\tfrac\",\n \"\\\\dbinom\",\n \"\\\\binom\",\n \"\\\\tbinom\",\n \"\\\\\\\\atopfrac\",\n \"\\\\\\\\bracefrac\",\n \"\\\\\\\\brackfrac\" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var numer = args[0];\n var denom = args[1];\n var hasBarLine;\n var leftDelim = null;\n var rightDelim = null;\n var size = \"auto\";\n switch(funcName){\n case \"\\\\dfrac\":\n case \"\\\\frac\":\n case \"\\\\tfrac\":\n hasBarLine = true;\n break;\n case \"\\\\\\\\atopfrac\":\n hasBarLine = false;\n break;\n case \"\\\\dbinom\":\n case \"\\\\binom\":\n case \"\\\\tbinom\":\n hasBarLine = false;\n leftDelim = \"(\";\n rightDelim = \")\";\n break;\n case \"\\\\\\\\bracefrac\":\n hasBarLine = false;\n leftDelim = \"\\\\{\";\n rightDelim = \"\\\\}\";\n break;\n case \"\\\\\\\\brackfrac\":\n hasBarLine = false;\n leftDelim = \"[\";\n rightDelim = \"]\";\n break;\n default:\n throw new Error(\"Unrecognized genfrac command\");\n }\n switch(funcName){\n case \"\\\\dfrac\":\n case \"\\\\dbinom\":\n size = \"display\";\n break;\n case \"\\\\tfrac\":\n case \"\\\\tbinom\":\n size = \"text\";\n break;\n }\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n size,\n barSize: null\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\n \"\\\\cfrac\"\n ],\n props: {\n numArgs: 2\n },\n handler: (_ref2, args)=>{\n var { parser, funcName } = _ref2;\n var numer = args[0];\n var denom = args[1];\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n size: \"display\",\n barSize: null\n };\n }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\ndefineFunction({\n type: \"infix\",\n names: [\n \"\\\\over\",\n \"\\\\choose\",\n \"\\\\atop\",\n \"\\\\brace\",\n \"\\\\brack\"\n ],\n props: {\n numArgs: 0,\n infix: true\n },\n handler (_ref3) {\n var { parser, funcName, token } = _ref3;\n var replaceWith;\n switch(funcName){\n case \"\\\\over\":\n replaceWith = \"\\\\frac\";\n break;\n case \"\\\\choose\":\n replaceWith = \"\\\\binom\";\n break;\n case \"\\\\atop\":\n replaceWith = \"\\\\\\\\atopfrac\";\n break;\n case \"\\\\brace\":\n replaceWith = \"\\\\\\\\bracefrac\";\n break;\n case \"\\\\brack\":\n replaceWith = \"\\\\\\\\brackfrac\";\n break;\n default:\n throw new Error(\"Unrecognized infix genfrac command\");\n }\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n});\nvar stylArray = [\n \"display\",\n \"text\",\n \"script\",\n \"scriptscript\"\n];\nvar delimFromValue = function delimFromValue(delimString) {\n var delim = null;\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === \".\" ? null : delim;\n }\n return delim;\n};\ndefineFunction({\n type: \"genfrac\",\n names: [\n \"\\\\genfrac\"\n ],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: [\n \"math\",\n \"math\",\n \"size\",\n \"text\",\n \"math\",\n \"math\"\n ]\n },\n handler (_ref4, args) {\n var { parser } = _ref4;\n var numer = args[4];\n var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n var leftNode = normalizeArgument(args[0]);\n var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n var rightNode = normalizeArgument(args[1]);\n var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n var barNode = assertNodeType(args[2], \"size\");\n var hasBarLine;\n var barSize = null;\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n } // Find out if we want displaystyle, textstyle, etc.\n var size = \"auto\";\n var styl = args[3];\n if (styl.type === \"ordgroup\") {\n if (styl.body.length > 0) {\n var textOrd = assertNodeType(styl.body[0], \"textord\");\n size = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, \"textord\");\n size = stylArray[Number(styl.text)];\n }\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n size\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\ndefineFunction({\n type: \"infix\",\n names: [\n \"\\\\above\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"size\"\n ],\n infix: true\n },\n handler (_ref5, args) {\n var { parser, funcName, token } = _ref5;\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith: \"\\\\\\\\abovefrac\",\n size: assertNodeType(args[0], \"size\").value,\n token\n };\n }\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\n \"\\\\\\\\abovefrac\"\n ],\n props: {\n numArgs: 3,\n argTypes: [\n \"math\",\n \"size\",\n \"math\"\n ]\n },\n handler: (_ref6, args)=>{\n var { parser, funcName } = _ref6;\n var numer = args[0];\n var barSize = assert(assertNodeType(args[1], \"infix\").size);\n var denom = args[2];\n var hasBarLine = barSize.number > 0;\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n size: \"auto\"\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options)=>{\n var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n var supSubGroup;\n var group;\n if (grp.type === \"supsub\") {\n // Ref: LaTeX source2e: }}}}\\limits}\n // i.e. LaTeX treats the brace similar to an op and passes it\n // with \\limits, so we need to assign supsub style.\n supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n group = assertNodeType(grp.base, \"horizBrace\");\n } else {\n group = assertNodeType(grp, \"horizBrace\");\n } // Build the base group\n var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓\n // This first vlist contains the content and the brace: equation\n var vlist;\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: body\n },\n {\n type: \"kern\",\n size: 0.1\n },\n {\n type: \"elem\",\n elem: braceBody\n }\n ]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: body.depth + 0.1 + braceBody.height,\n children: [\n {\n type: \"elem\",\n elem: braceBody\n },\n {\n type: \"kern\",\n size: 0.1\n },\n {\n type: \"elem\",\n elem: body\n }\n ]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n }\n if (supSubGroup) {\n // To write the supsub, wrap the first vlist in another vlist:\n // They can't all go in the same vlist, because the note might be\n // wider than the equation. We want the equation to control the\n // brace width.\n // note long note long note\n // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓\n // equation eqn eqn\n var vSpan = buildCommon.makeSpan([\n \"mord\",\n group.isOver ? \"mover\" : \"munder\"\n ], [\n vlist\n ], options);\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: vSpan\n },\n {\n type: \"kern\",\n size: 0.2\n },\n {\n type: \"elem\",\n elem: supSubGroup\n }\n ]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n children: [\n {\n type: \"elem\",\n elem: supSubGroup\n },\n {\n type: \"kern\",\n size: 0.2\n },\n {\n type: \"elem\",\n elem: vSpan\n }\n ]\n }, options);\n }\n }\n return buildCommon.makeSpan([\n \"mord\",\n group.isOver ? \"mover\" : \"munder\"\n ], [\n vlist\n ], options);\n};\nvar mathmlBuilder$2 = (group, options)=>{\n var accentNode = stretchy.mathMLnode(group.label);\n return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [\n buildGroup(group.base, options),\n accentNode\n ]);\n}; // Horizontal stretchy braces\ndefineFunction({\n type: \"horizBrace\",\n names: [\n \"\\\\overbrace\",\n \"\\\\underbrace\"\n ],\n props: {\n numArgs: 1\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n return {\n type: \"horizBrace\",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n htmlBuilder: htmlBuilder$3,\n mathmlBuilder: mathmlBuilder$2\n});\ndefineFunction({\n type: \"href\",\n names: [\n \"\\\\href\"\n ],\n props: {\n numArgs: 2,\n argTypes: [\n \"url\",\n \"original\"\n ],\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { parser } = _ref;\n var body = args[1];\n var href = assertNodeType(args[0], \"url\").url;\n if (!parser.settings.isTrusted({\n command: \"\\\\href\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\href\");\n }\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options)=>{\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeAnchor(group.href, [], elements, options);\n },\n mathmlBuilder: (group, options)=>{\n var math = buildExpressionRow(group.body, options);\n if (!(math instanceof MathNode)) {\n math = new MathNode(\"mrow\", [\n math\n ]);\n }\n math.setAttribute(\"href\", group.href);\n return math;\n }\n});\ndefineFunction({\n type: \"href\",\n names: [\n \"\\\\url\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"url\"\n ],\n allowedInText: true\n },\n handler: (_ref2, args)=>{\n var { parser } = _ref2;\n var href = assertNodeType(args[0], \"url\").url;\n if (!parser.settings.isTrusted({\n command: \"\\\\url\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\url\");\n }\n var chars = [];\n for(var i = 0; i < href.length; i++){\n var c = href[i];\n if (c === \"~\") {\n c = \"\\\\textasciitilde\";\n }\n chars.push({\n type: \"textord\",\n mode: \"text\",\n text: c\n });\n }\n var body = {\n type: \"text\",\n mode: parser.mode,\n font: \"\\\\texttt\",\n body: chars\n };\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n }\n});\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\ndefineFunction({\n type: \"hbox\",\n names: [\n \"\\\\hbox\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"text\"\n ],\n allowedInText: true,\n primitive: true\n },\n handler (_ref, args) {\n var { parser } = _ref;\n return {\n type: \"hbox\",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n htmlBuilder (group, options) {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder (group, options) {\n return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n }\n});\ndefineFunction({\n type: \"html\",\n names: [\n \"\\\\htmlClass\",\n \"\\\\htmlId\",\n \"\\\\htmlStyle\",\n \"\\\\htmlData\"\n ],\n props: {\n numArgs: 2,\n argTypes: [\n \"raw\",\n \"original\"\n ],\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { parser, funcName, token } = _ref;\n var value = assertNodeType(args[0], \"raw\").string;\n var body = args[1];\n if (parser.settings.strict) {\n parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n }\n var trustContext;\n var attributes = {};\n switch(funcName){\n case \"\\\\htmlClass\":\n attributes.class = value;\n trustContext = {\n command: \"\\\\htmlClass\",\n class: value\n };\n break;\n case \"\\\\htmlId\":\n attributes.id = value;\n trustContext = {\n command: \"\\\\htmlId\",\n id: value\n };\n break;\n case \"\\\\htmlStyle\":\n attributes.style = value;\n trustContext = {\n command: \"\\\\htmlStyle\",\n style: value\n };\n break;\n case \"\\\\htmlData\":\n {\n var data = value.split(\",\");\n for(var i = 0; i < data.length; i++){\n var keyVal = data[i].split(\"=\");\n if (keyVal.length !== 2) {\n throw new ParseError(\"Error parsing key-value for \\\\htmlData\");\n }\n attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n }\n trustContext = {\n command: \"\\\\htmlData\",\n attributes\n };\n break;\n }\n default:\n throw new Error(\"Unrecognized html command\");\n }\n if (!parser.settings.isTrusted(trustContext)) {\n return parser.formatUnsupportedCmd(funcName);\n }\n return {\n type: \"html\",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options)=>{\n var elements = buildExpression$1(group.body, options, false);\n var classes = [\n \"enclosing\"\n ];\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n var span = buildCommon.makeSpan(classes, elements, options);\n for(var attr in group.attributes){\n if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n span.setAttribute(attr, group.attributes[attr]);\n }\n }\n return span;\n },\n mathmlBuilder: (group, options)=>{\n return buildExpressionRow(group.body, options);\n }\n});\ndefineFunction({\n type: \"htmlmathml\",\n names: [\n \"\\\\html@mathml\"\n ],\n props: {\n numArgs: 2,\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { parser } = _ref;\n return {\n type: \"htmlmathml\",\n mode: parser.mode,\n html: ordargument(args[0]),\n mathml: ordargument(args[1])\n };\n },\n htmlBuilder: (group, options)=>{\n var elements = buildExpression$1(group.html, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options)=>{\n return buildExpressionRow(group.mathml, options);\n }\n});\nvar sizeData = function sizeData(str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return {\n number: +str,\n unit: \"bp\"\n };\n } else {\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n }\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n }\n return data;\n }\n};\ndefineFunction({\n type: \"includegraphics\",\n names: [\n \"\\\\includegraphics\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: [\n \"raw\",\n \"url\"\n ],\n allowedInText: false\n },\n handler: (_ref, args, optArgs)=>{\n var { parser } = _ref;\n var width = {\n number: 0,\n unit: \"em\"\n };\n var height = {\n number: 0.9,\n unit: \"em\"\n }; // sorta character sized.\n var totalheight = {\n number: 0,\n unit: \"em\"\n };\n var alt = \"\";\n if (optArgs[0]) {\n var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n var attributes = attributeStr.split(\",\");\n for(var i = 0; i < attributes.length; i++){\n var keyVal = attributes[i].split(\"=\");\n if (keyVal.length === 2) {\n var str = keyVal[1].trim();\n switch(keyVal[0].trim()){\n case \"alt\":\n alt = str;\n break;\n case \"width\":\n width = sizeData(str);\n break;\n case \"height\":\n height = sizeData(str);\n break;\n case \"totalheight\":\n totalheight = sizeData(str);\n break;\n default:\n throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n }\n }\n }\n }\n var src = assertNodeType(args[0], \"url\").url;\n if (alt === \"\") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, \"\");\n alt = alt.substring(0, alt.lastIndexOf(\".\"));\n }\n if (!parser.settings.isTrusted({\n command: \"\\\\includegraphics\",\n url: src\n })) {\n return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n }\n return {\n type: \"includegraphics\",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n };\n },\n htmlBuilder: (group, options)=>{\n var height = calculateSize(group.height, options);\n var depth = 0;\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n }\n var width = 0;\n if (group.width.number > 0) {\n width = calculateSize(group.width, options);\n }\n var style = {\n height: makeEm(height + depth)\n };\n if (width > 0) {\n style.width = makeEm(width);\n }\n if (depth > 0) {\n style.verticalAlign = makeEm(-depth);\n }\n var node = new Img(group.src, group.alt, style);\n node.height = height;\n node.depth = depth;\n return node;\n },\n mathmlBuilder: (group, options)=>{\n var node = new mathMLTree.MathNode(\"mglyph\", []);\n node.setAttribute(\"alt\", group.alt);\n var height = calculateSize(group.height, options);\n var depth = 0;\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n node.setAttribute(\"valign\", makeEm(-depth));\n }\n node.setAttribute(\"height\", makeEm(height + depth));\n if (group.width.number > 0) {\n var width = calculateSize(group.width, options);\n node.setAttribute(\"width\", makeEm(width));\n }\n node.setAttribute(\"src\", group.src);\n return node;\n }\n});\n// Horizontal spacing commands\ndefineFunction({\n type: \"kern\",\n names: [\n \"\\\\kern\",\n \"\\\\mkern\",\n \"\\\\hskip\",\n \"\\\\mskip\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"size\"\n ],\n primitive: true,\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n var size = assertNodeType(args[0], \"size\");\n if (parser.settings.strict) {\n var mathFunction = funcName[1] === \"m\"; // \\mkern, \\mskip\n var muUnit = size.value.unit === \"mu\";\n if (mathFunction) {\n if (!muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n }\n if (parser.mode !== \"math\") {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n }\n } else {\n // !mathFunction\n if (muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n }\n }\n }\n return {\n type: \"kern\",\n mode: parser.mode,\n dimension: size.value\n };\n },\n htmlBuilder (group, options) {\n return buildCommon.makeGlue(group.dimension, options);\n },\n mathmlBuilder (group, options) {\n var dimension = calculateSize(group.dimension, options);\n return new mathMLTree.SpaceNode(dimension);\n }\n});\n// Horizontal overlap functions\ndefineFunction({\n type: \"lap\",\n names: [\n \"\\\\mathllap\",\n \"\\\\mathrlap\",\n \"\\\\mathclap\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var body = args[0];\n return {\n type: \"lap\",\n mode: parser.mode,\n alignment: funcName.slice(5),\n body\n };\n },\n htmlBuilder: (group, options)=>{\n // mathllap, mathrlap, mathclap\n var inner;\n if (group.alignment === \"clap\") {\n // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n inner = buildCommon.makeSpan([], [\n buildGroup$1(group.body, options)\n ]); // wrap, since CSS will center a .clap > .inner > span\n inner = buildCommon.makeSpan([\n \"inner\"\n ], [\n inner\n ], options);\n } else {\n inner = buildCommon.makeSpan([\n \"inner\"\n ], [\n buildGroup$1(group.body, options)\n ]);\n }\n var fix = buildCommon.makeSpan([\n \"fix\"\n ], []);\n var node = buildCommon.makeSpan([\n group.alignment\n ], [\n inner,\n fix\n ], options); // At this point, we have correctly set horizontal alignment of the\n // two items involved in the lap.\n // Next, use a strut to set the height of the HTML bounding box.\n // Otherwise, a tall argument may be misplaced.\n // This code resolved issue #1153\n var strut = buildCommon.makeSpan([\n \"strut\"\n ]);\n strut.style.height = makeEm(node.height + node.depth);\n if (node.depth) {\n strut.style.verticalAlign = makeEm(-node.depth);\n }\n node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n // This code resolves issue #1234\n node = buildCommon.makeSpan([\n \"thinbox\"\n ], [\n node\n ], options);\n return buildCommon.makeSpan([\n \"mord\",\n \"vbox\"\n ], [\n node\n ], options);\n },\n mathmlBuilder: (group, options)=>{\n // mathllap, mathrlap, mathclap\n var node = new mathMLTree.MathNode(\"mpadded\", [\n buildGroup(group.body, options)\n ]);\n if (group.alignment !== \"rlap\") {\n var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n node.setAttribute(\"lspace\", offset + \"width\");\n }\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"styling\",\n names: [\n \"\\\\(\",\n \"$\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n handler (_ref, args) {\n var { funcName, parser } = _ref;\n var outerMode = parser.mode;\n parser.switchMode(\"math\");\n var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n var body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: \"styling\",\n mode: parser.mode,\n style: \"text\",\n body\n };\n }\n}); // Check for extra closing math delimiters\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\n \"\\\\)\",\n \"\\\\]\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n handler (context, args) {\n throw new ParseError(\"Mismatched \" + context.funcName);\n }\n});\nvar chooseMathStyle = (group, options)=>{\n switch(options.style.size){\n case Style$1.DISPLAY.size:\n return group.display;\n case Style$1.TEXT.size:\n return group.text;\n case Style$1.SCRIPT.size:\n return group.script;\n case Style$1.SCRIPTSCRIPT.size:\n return group.scriptscript;\n default:\n return group.text;\n }\n};\ndefineFunction({\n type: \"mathchoice\",\n names: [\n \"\\\\mathchoice\"\n ],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: (_ref, args)=>{\n var { parser } = _ref;\n return {\n type: \"mathchoice\",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n htmlBuilder: (group, options)=>{\n var body = chooseMathStyle(group, options);\n var elements = buildExpression$1(body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options)=>{\n var body = chooseMathStyle(group, options);\n return buildExpressionRow(body, options);\n }\n});\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift)=>{\n base = buildCommon.makeSpan([], [\n base\n ]);\n var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n var sub;\n var sup; // We manually have to handle the superscripts and subscripts. This,\n // aside from the kern calculations, is copied from supsub.\n if (supGroup) {\n var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n sup = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n };\n }\n if (subGroup) {\n var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n sub = {\n elem: _elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n };\n } // Build the final group as a vlist of the possible subscript, base,\n // and possible superscript.\n var finalGroup;\n if (sup && sub) {\n var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: bottom,\n children: [\n {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n },\n {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n },\n {\n type: \"kern\",\n size: sub.kern\n },\n {\n type: \"elem\",\n elem: base\n },\n {\n type: \"kern\",\n size: sup.kern\n },\n {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n },\n {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }\n ]\n }, options);\n } else if (sub) {\n var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n // that we are supposed to shift the limits by 1/2 of the slant,\n // but since we are centering the limits adding a full slant of\n // margin will shift by 1/2 that.\n finalGroup = buildCommon.makeVList({\n positionType: \"top\",\n positionData: top,\n children: [\n {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n },\n {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n },\n {\n type: \"kern\",\n size: sub.kern\n },\n {\n type: \"elem\",\n elem: base\n }\n ]\n }, options);\n } else if (sup) {\n var _bottom = base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: _bottom,\n children: [\n {\n type: \"elem\",\n elem: base\n },\n {\n type: \"kern\",\n size: sup.kern\n },\n {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n },\n {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }\n ]\n }, options);\n } else {\n // This case probably shouldn't occur (this would mean the\n // supsub was sending us a group with no superscript or\n // subscript) but be safe.\n return base;\n }\n var parts = [\n finalGroup\n ];\n if (sub && slant !== 0 && !subIsSingleCharacter) {\n // A negative margin-left was applied to the lower limit.\n // Avoid an overlap by placing a spacer on the left on the group.\n var spacer = buildCommon.makeSpan([\n \"mspace\"\n ], [], options);\n spacer.style.marginRight = makeEm(slant);\n parts.unshift(spacer);\n }\n return buildCommon.makeSpan([\n \"mop\",\n \"op-limits\"\n ], parts, options);\n};\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\n \"\\\\smallint\"\n]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\nvar htmlBuilder$2 = (grp, options)=>{\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"op\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"op\");\n }\n var style = options.style;\n var large = false;\n if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {\n // Most symbol operators get larger in displaystyle (rule 13)\n large = true;\n }\n var base;\n if (group.symbol) {\n // If this is a symbol, create the symbol.\n var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n var stash = \"\";\n if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n // No font glyphs yet, so use a glyph w/o the oval.\n // TODO: When font glyphs are available, delete this code.\n stash = group.name.slice(1);\n group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n }\n base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\n \"mop\",\n \"op-symbol\",\n large ? \"large-op\" : \"small-op\"\n ]);\n if (stash.length > 0) {\n // We're in \\oiint or \\oiiint. Overlay the oval.\n // TODO: When font glyphs are available, delete this code.\n var italic = base.italic;\n var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n base = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [\n {\n type: \"elem\",\n elem: base,\n shift: 0\n },\n {\n type: \"elem\",\n elem: oval,\n shift: large ? 0.08 : 0\n }\n ]\n }, options);\n group.name = \"\\\\\" + stash;\n base.classes.unshift(\"mop\"); // $FlowFixMe\n base.italic = italic;\n }\n } else if (group.body) {\n // If this is a list, compose that list.\n var inner = buildExpression$1(group.body, options, true);\n if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n base = inner[0];\n base.classes[0] = \"mop\"; // replace old mclass\n } else {\n base = buildCommon.makeSpan([\n \"mop\"\n ], inner, options);\n }\n } else {\n // Otherwise, this is a text operator. Build the text from the\n // operator's name.\n var output = [];\n for(var i = 1; i < group.name.length; i++){\n output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n }\n base = buildCommon.makeSpan([\n \"mop\"\n ], output, options);\n } // If content of op is a single symbol, shift it vertically.\n var baseShift = 0;\n var slant = 0;\n if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n // shift the symbol so its center lies on the axis (rule 13). It\n // appears that our fonts have the centers of the symbols already\n // almost on the axis, so these numbers are very small. Note we\n // don't actually apply this here, but instead it is used either in\n // the vlist creation or separately when there are no limits.\n baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n // $FlowFixMe\n slant = base.italic;\n }\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n } else {\n if (baseShift) {\n base.style.position = \"relative\";\n base.style.top = makeEm(baseShift);\n }\n return base;\n }\n};\nvar mathmlBuilder$1 = (group, options)=>{\n var node;\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode(\"mo\", [\n makeText(group.name, group.mode)\n ]);\n if (utils.contains(noSuccessor, group.name)) {\n node.setAttribute(\"largeop\", \"false\");\n }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode(\"mo\", buildExpression(group.body, options));\n } else {\n // This is a text operator. Add all of the characters from the\n // operator's name.\n node = new MathNode(\"mi\", [\n new TextNode(group.name.slice(1))\n ]); // Append an <mo>⁡</mo>.\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n var operator = new MathNode(\"mo\", [\n makeText(\"\", \"text\")\n ]);\n if (group.parentIsSupSub) {\n node = new MathNode(\"mrow\", [\n node,\n operator\n ]);\n } else {\n node = newDocumentFragment([\n node,\n operator\n ]);\n }\n }\n return node;\n};\nvar singleCharBigOps = {\n \"∏\": \"\\\\prod\",\n \"∐\": \"\\\\coprod\",\n \"∑\": \"\\\\sum\",\n \"⋀\": \"\\\\bigwedge\",\n \"⋁\": \"\\\\bigvee\",\n \"⋂\": \"\\\\bigcap\",\n \"⋃\": \"\\\\bigcup\",\n \"⨀\": \"\\\\bigodot\",\n \"⨁\": \"\\\\bigoplus\",\n \"⨂\": \"\\\\bigotimes\",\n \"⨄\": \"\\\\biguplus\",\n \"⨆\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\coprod\",\n \"\\\\bigvee\",\n \"\\\\bigwedge\",\n \"\\\\biguplus\",\n \"\\\\bigcap\",\n \"\\\\bigcup\",\n \"\\\\intop\",\n \"\\\\prod\",\n \"\\\\sum\",\n \"\\\\bigotimes\",\n \"\\\\bigoplus\",\n \"\\\\bigodot\",\n \"\\\\bigsqcup\",\n \"\\\\smallint\",\n \"∏\",\n \"∐\",\n \"∑\",\n \"⋀\",\n \"⋁\",\n \"⋂\",\n \"⋃\",\n \"⨀\",\n \"⨁\",\n \"⨂\",\n \"⨄\",\n \"⨆\"\n ],\n props: {\n numArgs: 0\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var fName = funcName;\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\mathop\"\n ],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (_ref2, args)=>{\n var { parser } = _ref2;\n var body = args[0];\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n body: ordargument(body)\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\nvar singleCharIntegrals = {\n \"∫\": \"\\\\int\",\n \"∬\": \"\\\\iint\",\n \"∭\": \"\\\\iiint\",\n \"∮\": \"\\\\oint\",\n \"∯\": \"\\\\oiint\",\n \"∰\": \"\\\\oiiint\"\n}; // No limits, not symbols\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\arcsin\",\n \"\\\\arccos\",\n \"\\\\arctan\",\n \"\\\\arctg\",\n \"\\\\arcctg\",\n \"\\\\arg\",\n \"\\\\ch\",\n \"\\\\cos\",\n \"\\\\cosec\",\n \"\\\\cosh\",\n \"\\\\cot\",\n \"\\\\cotg\",\n \"\\\\coth\",\n \"\\\\csc\",\n \"\\\\ctg\",\n \"\\\\cth\",\n \"\\\\deg\",\n \"\\\\dim\",\n \"\\\\exp\",\n \"\\\\hom\",\n \"\\\\ker\",\n \"\\\\lg\",\n \"\\\\ln\",\n \"\\\\log\",\n \"\\\\sec\",\n \"\\\\sin\",\n \"\\\\sinh\",\n \"\\\\sh\",\n \"\\\\tan\",\n \"\\\\tanh\",\n \"\\\\tg\",\n \"\\\\th\"\n ],\n props: {\n numArgs: 0\n },\n handler (_ref3) {\n var { parser, funcName } = _ref3;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\det\",\n \"\\\\gcd\",\n \"\\\\inf\",\n \"\\\\lim\",\n \"\\\\max\",\n \"\\\\min\",\n \"\\\\Pr\",\n \"\\\\sup\"\n ],\n props: {\n numArgs: 0\n },\n handler (_ref4) {\n var { parser, funcName } = _ref4;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\ndefineFunction({\n type: \"op\",\n names: [\n \"\\\\int\",\n \"\\\\iint\",\n \"\\\\iiint\",\n \"\\\\oint\",\n \"\\\\oiint\",\n \"\\\\oiiint\",\n \"∫\",\n \"∬\",\n \"∭\",\n \"∮\",\n \"∯\",\n \"∰\"\n ],\n props: {\n numArgs: 0\n },\n handler (_ref5) {\n var { parser, funcName } = _ref5;\n var fName = funcName;\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n});\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options)=>{\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"operatorname\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"operatorname\");\n }\n var base;\n if (group.body.length > 0) {\n var body = group.body.map((child)=>{\n // $FlowFixMe: Check if the node has a string `text` property.\n var childText = child.text;\n if (typeof childText === \"string\") {\n return {\n type: \"textord\",\n mode: child.mode,\n text: childText\n };\n } else {\n return child;\n }\n }); // Consolidate function names into symbol characters.\n var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n for(var i = 0; i < expression.length; i++){\n var child = expression[i];\n if (child instanceof SymbolNode) {\n // Per amsopn package,\n // change minus to hyphen and \\ast to asterisk\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n }\n }\n base = buildCommon.makeSpan([\n \"mop\"\n ], expression, options);\n } else {\n base = buildCommon.makeSpan([\n \"mop\"\n ], [], options);\n }\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n } else {\n return base;\n }\n};\nvar mathmlBuilder = (group, options)=>{\n // The steps taken here are similar to the html version.\n var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n var isAllString = true; // default\n for(var i = 0; i < expression.length; i++){\n var node = expression[i];\n if (node instanceof mathMLTree.SpaceNode) ;\n else if (node instanceof mathMLTree.MathNode) {\n switch(node.type){\n case \"mi\":\n case \"mn\":\n case \"ms\":\n case \"mspace\":\n case \"mtext\":\n break;\n // Do nothing yet.\n case \"mo\":\n {\n var child = node.children[0];\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n } else {\n isAllString = false;\n }\n break;\n }\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n var word = expression.map((node)=>node.toText()).join(\"\");\n expression = [\n new mathMLTree.TextNode(word)\n ];\n }\n var identifier = new mathMLTree.MathNode(\"mi\", expression);\n identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as ⁡\n // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n var operator = new mathMLTree.MathNode(\"mo\", [\n makeText(\"\", \"text\")\n ]);\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode(\"mrow\", [\n identifier,\n operator\n ]);\n } else {\n return mathMLTree.newDocumentFragment([\n identifier,\n operator\n ]);\n }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\ndefineFunction({\n type: \"operatorname\",\n names: [\n \"\\\\operatorname@\",\n \"\\\\operatornamewithlimits\"\n ],\n props: {\n numArgs: 1\n },\n handler: (_ref, args)=>{\n var { parser, funcName } = _ref;\n var body = args[0];\n return {\n type: \"operatorname\",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n limits: false,\n parentIsSupSub: false\n };\n },\n htmlBuilder: htmlBuilder$1,\n mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\ndefineFunctionBuilders({\n type: \"ordgroup\",\n htmlBuilder (group, options) {\n if (group.semisimple) {\n return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n }\n return buildCommon.makeSpan([\n \"mord\"\n ], buildExpression$1(group.body, options, true), options);\n },\n mathmlBuilder (group, options) {\n return buildExpressionRow(group.body, options, true);\n }\n});\ndefineFunction({\n type: \"overline\",\n names: [\n \"\\\\overline\"\n ],\n props: {\n numArgs: 1\n },\n handler (_ref, args) {\n var { parser } = _ref;\n var body = args[0];\n return {\n type: \"overline\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder (group, options) {\n // Overlines are handled in the TeXbook pg 443, Rule 9.\n // Build the inner group in the cramped style.\n var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: innerGroup\n },\n {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n },\n {\n type: \"elem\",\n elem: line\n },\n {\n type: \"kern\",\n size: defaultRuleThickness\n }\n ]\n }, options);\n return buildCommon.makeSpan([\n \"mord\",\n \"overline\"\n ], [\n vlist\n ], options);\n },\n mathmlBuilder (group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(\"‾\")\n ]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"mover\", [\n buildGroup(group.body, options),\n operator\n ]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n }\n});\ndefineFunction({\n type: \"phantom\",\n names: [\n \"\\\\phantom\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { parser } = _ref;\n var body = args[0];\n return {\n type: \"phantom\",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options)=>{\n var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n // See \"color\" for more details.\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options)=>{\n var inner = buildExpression(group.body, options);\n return new mathMLTree.MathNode(\"mphantom\", inner);\n }\n});\ndefineFunction({\n type: \"hphantom\",\n names: [\n \"\\\\hphantom\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref2, args)=>{\n var { parser } = _ref2;\n var body = args[0];\n return {\n type: \"hphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options)=>{\n var node = buildCommon.makeSpan([], [\n buildGroup$1(group.body, options.withPhantom())\n ]);\n node.height = 0;\n node.depth = 0;\n if (node.children) {\n for(var i = 0; i < node.children.length; i++){\n node.children[i].height = 0;\n node.children[i].depth = 0;\n }\n } // See smash for comment re: use of makeVList\n node = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: node\n }\n ]\n }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n return buildCommon.makeSpan([\n \"mord\"\n ], [\n node\n ], options);\n },\n mathmlBuilder: (group, options)=>{\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [\n phantom\n ]);\n node.setAttribute(\"height\", \"0px\");\n node.setAttribute(\"depth\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"vphantom\",\n names: [\n \"\\\\vphantom\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref3, args)=>{\n var { parser } = _ref3;\n var body = args[0];\n return {\n type: \"vphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options)=>{\n var inner = buildCommon.makeSpan([\n \"inner\"\n ], [\n buildGroup$1(group.body, options.withPhantom())\n ]);\n var fix = buildCommon.makeSpan([\n \"fix\"\n ], []);\n return buildCommon.makeSpan([\n \"mord\",\n \"rlap\"\n ], [\n inner,\n fix\n ], options);\n },\n mathmlBuilder: (group, options)=>{\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [\n phantom\n ]);\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"raisebox\",\n names: [\n \"\\\\raisebox\"\n ],\n props: {\n numArgs: 2,\n argTypes: [\n \"size\",\n \"hbox\"\n ],\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser } = _ref;\n var amount = assertNodeType(args[0], \"size\").value;\n var body = args[1];\n return {\n type: \"raisebox\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n htmlBuilder (group, options) {\n var body = buildGroup$1(group.body, options);\n var dy = calculateSize(group.dy, options);\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -dy,\n children: [\n {\n type: \"elem\",\n elem: body\n }\n ]\n }, options);\n },\n mathmlBuilder (group, options) {\n var node = new mathMLTree.MathNode(\"mpadded\", [\n buildGroup(group.body, options)\n ]);\n var dy = group.dy.number + group.dy.unit;\n node.setAttribute(\"voffset\", dy);\n return node;\n }\n});\ndefineFunction({\n type: \"internal\",\n names: [\n \"\\\\relax\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler (_ref) {\n var { parser } = _ref;\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n});\ndefineFunction({\n type: \"rule\",\n names: [\n \"\\\\rule\"\n ],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n argTypes: [\n \"size\",\n \"size\",\n \"size\"\n ]\n },\n handler (_ref, args, optArgs) {\n var { parser } = _ref;\n var shift = optArgs[0];\n var width = assertNodeType(args[0], \"size\");\n var height = assertNodeType(args[1], \"size\");\n return {\n type: \"rule\",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, \"size\").value,\n width: width.value,\n height: height.value\n };\n },\n htmlBuilder (group, options) {\n // Make an empty span for the rule\n var rule = buildCommon.makeSpan([\n \"mord\",\n \"rule\"\n ], [], options); // Calculate the shift, width, and height of the rule, and account for units\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n rule.style.borderRightWidth = makeEm(width);\n rule.style.borderTopWidth = makeEm(height);\n rule.style.bottom = makeEm(shift); // Record the height and width\n rule.width = width;\n rule.height = height + shift;\n rule.depth = -shift; // Font size is the number large enough that the browser will\n // reserve at least `absHeight` space above the baseline.\n // The 1.125 factor was empirically determined\n rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n return rule;\n },\n mathmlBuilder (group, options) {\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0;\n var color = options.color && options.getColor() || \"black\";\n var rule = new mathMLTree.MathNode(\"mspace\");\n rule.setAttribute(\"mathbackground\", color);\n rule.setAttribute(\"width\", makeEm(width));\n rule.setAttribute(\"height\", makeEm(height));\n var wrapper = new mathMLTree.MathNode(\"mpadded\", [\n rule\n ]);\n if (shift >= 0) {\n wrapper.setAttribute(\"height\", makeEm(shift));\n } else {\n wrapper.setAttribute(\"height\", makeEm(shift));\n wrapper.setAttribute(\"depth\", makeEm(-shift));\n }\n wrapper.setAttribute(\"voffset\", makeEm(shift));\n return wrapper;\n }\n});\nfunction sizingGroup(value, options, baseOptions) {\n var inner = buildExpression$1(value, options, false);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n // manually. Handle nested size changes.\n for(var i = 0; i < inner.length; i++){\n var pos = inner[i].classes.indexOf(\"sizing\");\n if (pos < 0) {\n Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n // This is a nested size change: e.g., inner[i] is the \"b\" in\n // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n // but not the new size.\n inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n }\n inner[i].height *= multiplier;\n inner[i].depth *= multiplier;\n }\n return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\n \"\\\\tiny\",\n \"\\\\sixptsize\",\n \"\\\\scriptsize\",\n \"\\\\footnotesize\",\n \"\\\\small\",\n \"\\\\normalsize\",\n \"\\\\large\",\n \"\\\\Large\",\n \"\\\\LARGE\",\n \"\\\\huge\",\n \"\\\\Huge\"\n];\nvar htmlBuilder = (group, options)=>{\n // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n // these functions inside of math expressions, so we do some special\n // handling.\n var newOptions = options.havingSize(group.size);\n return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n type: \"sizing\",\n names: sizeFuncs,\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref, args)=>{\n var { breakOnTokenText, funcName, parser } = _ref;\n var body = parser.parseExpression(false, breakOnTokenText);\n return {\n type: \"sizing\",\n mode: parser.mode,\n // Figure out what size to use based on the list of functions above\n size: sizeFuncs.indexOf(funcName) + 1,\n body\n };\n },\n htmlBuilder,\n mathmlBuilder: (group, options)=>{\n var newOptions = options.havingSize(group.size);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n // changes, because we don't keep state of what style we're currently\n // in, so we can't reset the size to normal before changing it. Now\n // that we're passing an options parameter we should be able to fix\n // this.\n node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n return node;\n }\n});\n// smash, with optional [tb], as in AMS\ndefineFunction({\n type: \"smash\",\n names: [\n \"\\\\smash\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args, optArgs)=>{\n var { parser } = _ref;\n var smashHeight = false;\n var smashDepth = false;\n var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n var letter = \"\";\n for(var i = 0; i < tbArg.body.length; ++i){\n var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n letter = node.text;\n if (letter === \"t\") {\n smashHeight = true;\n } else if (letter === \"b\") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n var body = args[0];\n return {\n type: \"smash\",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n htmlBuilder: (group, options)=>{\n var node = buildCommon.makeSpan([], [\n buildGroup$1(group.body, options)\n ]);\n if (!group.smashHeight && !group.smashDepth) {\n return node;\n }\n if (group.smashHeight) {\n node.height = 0; // In order to influence makeVList, we have to reset the children.\n if (node.children) {\n for(var i = 0; i < node.children.length; i++){\n node.children[i].height = 0;\n }\n }\n }\n if (group.smashDepth) {\n node.depth = 0;\n if (node.children) {\n for(var _i = 0; _i < node.children.length; _i++){\n node.children[_i].depth = 0;\n }\n }\n } // At this point, we've reset the TeX-like height and depth values.\n // But the span still has an HTML line height.\n // makeVList applies \"display: table-cell\", which prevents the browser\n // from acting on that line height. So we'll call makeVList now.\n var smashedNode = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: node\n }\n ]\n }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n return buildCommon.makeSpan([\n \"mord\"\n ], [\n smashedNode\n ], options);\n },\n mathmlBuilder: (group, options)=>{\n var node = new mathMLTree.MathNode(\"mpadded\", [\n buildGroup(group.body, options)\n ]);\n if (group.smashHeight) {\n node.setAttribute(\"height\", \"0px\");\n }\n if (group.smashDepth) {\n node.setAttribute(\"depth\", \"0px\");\n }\n return node;\n }\n});\ndefineFunction({\n type: \"sqrt\",\n names: [\n \"\\\\sqrt\"\n ],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n handler (_ref, args, optArgs) {\n var { parser } = _ref;\n var index = optArgs[0];\n var body = args[0];\n return {\n type: \"sqrt\",\n mode: parser.mode,\n body,\n index\n };\n },\n htmlBuilder (group, options) {\n // Square roots are handled in the TeXbook pg. 443, Rule 11.\n // First, we do the same steps as in overline to build the inner group\n // and line\n var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n if (inner.height === 0) {\n // Render a small surd.\n inner.height = options.fontMetrics().xHeight;\n } // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n var metrics = options.fontMetrics();\n var theta = metrics.defaultRuleThickness;\n var phi = theta;\n if (options.style.id < Style$1.TEXT.id) {\n phi = options.fontMetrics().xHeight;\n } // Calculate the clearance between the body and line\n var lineClearance = theta + phi / 4;\n var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n var { span: img, ruleWidth, advanceWidth } = delimiter.sqrtImage(minDelimiterHeight, options);\n var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n if (delimDepth > inner.height + inner.depth + lineClearance) {\n lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n } // Shift the sqrt image\n var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n var body = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [\n {\n type: \"elem\",\n elem: inner,\n wrapperClasses: [\n \"svg-align\"\n ]\n },\n {\n type: \"kern\",\n size: -(inner.height + imgShift)\n },\n {\n type: \"elem\",\n elem: img\n },\n {\n type: \"kern\",\n size: ruleWidth\n }\n ]\n }, options);\n if (!group.index) {\n return buildCommon.makeSpan([\n \"mord\",\n \"sqrt\"\n ], [\n body\n ], options);\n } else {\n // Handle the optional root index\n // The index is always in scriptscript style\n var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n // source, in the definition of `\\r@@t`.\n var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n var rootVList = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -toShift,\n children: [\n {\n type: \"elem\",\n elem: rootm\n }\n ]\n }, options); // Add a class surrounding it so we can add on the appropriate\n // kerning\n var rootVListWrap = buildCommon.makeSpan([\n \"root\"\n ], [\n rootVList\n ]);\n return buildCommon.makeSpan([\n \"mord\",\n \"sqrt\"\n ], [\n rootVListWrap,\n body\n ], options);\n }\n },\n mathmlBuilder (group, options) {\n var { body, index } = group;\n return index ? new mathMLTree.MathNode(\"mroot\", [\n buildGroup(body, options),\n buildGroup(index, options)\n ]) : new mathMLTree.MathNode(\"msqrt\", [\n buildGroup(body, options)\n ]);\n }\n});\nvar styleMap = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n type: \"styling\",\n names: [\n \"\\\\displaystyle\",\n \"\\\\textstyle\",\n \"\\\\scriptstyle\",\n \"\\\\scriptscriptstyle\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n handler (_ref, args) {\n var { breakOnTokenText, funcName, parser } = _ref;\n // parse out the implicit body\n var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n // here and in buildHTML and de-dupe the enumeration of all the styles).\n // $FlowFixMe: The names above exactly match the styles.\n var style = funcName.slice(1, funcName.length - 5);\n return {\n type: \"styling\",\n mode: parser.mode,\n // Figure out what style to use by pulling out the style from\n // the function name\n style,\n body\n };\n },\n htmlBuilder (group, options) {\n // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle).withFont(\"\");\n return sizingGroup(group.body, newOptions, options);\n },\n mathmlBuilder (group, options) {\n // Figure out what style we're changing to.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n var styleAttributes = {\n \"display\": [\n \"0\",\n \"true\"\n ],\n \"text\": [\n \"0\",\n \"false\"\n ],\n \"script\": [\n \"1\",\n \"false\"\n ],\n \"scriptscript\": [\n \"2\",\n \"false\"\n ]\n };\n var attr = styleAttributes[group.style];\n node.setAttribute(\"scriptlevel\", attr[0]);\n node.setAttribute(\"displaystyle\", attr[1]);\n return node;\n }\n});\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */ var htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n var base = group.base;\n if (!base) {\n return null;\n } else if (base.type === \"op\") {\n // Operators handle supsubs differently when they have limits\n // (e.g. `\\displaystyle\\sum_2^3`)\n var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n return delegate ? htmlBuilder$2 : null;\n } else if (base.type === \"operatorname\") {\n var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n return _delegate ? htmlBuilder$1 : null;\n } else if (base.type === \"accent\") {\n return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n } else if (base.type === \"horizBrace\") {\n var isSup = !group.sub;\n return isSup === base.isOver ? htmlBuilder$3 : null;\n } else {\n return null;\n }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\ndefineFunctionBuilders({\n type: \"supsub\",\n htmlBuilder (group, options) {\n // Superscript and subscripts are handled in the TeXbook on page\n // 445-446, rules 18(a-f).\n // Here is where we defer to the inner group if it should handle\n // superscripts and subscripts itself.\n var builderDelegate = htmlBuilderDelegate(group, options);\n if (builderDelegate) {\n return builderDelegate(group, options);\n }\n var { base: valueBase, sup: valueSup, sub: valueSub } = group;\n var base = buildGroup$1(valueBase, options);\n var supm;\n var subm;\n var metrics = options.fontMetrics(); // Rule 18a\n var supShift = 0;\n var subShift = 0;\n var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n if (valueSup) {\n var newOptions = options.havingStyle(options.style.sup());\n supm = buildGroup$1(valueSup, newOptions, options);\n if (!isCharacterBox) {\n supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n if (valueSub) {\n var _newOptions = options.havingStyle(options.style.sub());\n subm = buildGroup$1(valueSub, _newOptions, options);\n if (!isCharacterBox) {\n subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n } // Rule 18c\n var minSupShift;\n if (options.style === Style$1.DISPLAY) {\n minSupShift = metrics.sup1;\n } else if (options.style.cramped) {\n minSupShift = metrics.sup3;\n } else {\n minSupShift = metrics.sup2;\n } // scriptspace is a font-size-independent size, so scale it\n // appropriately for use as the marginRight.\n var multiplier = options.sizeMultiplier;\n var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n var marginLeft = null;\n if (subm) {\n // Subscripts shouldn't be shifted by the base's italic correction.\n // Account for that by shifting the subscript back the appropriate\n // amount. Note we only do this when the base is a single symbol.\n var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n if (base instanceof SymbolNode || isOiint) {\n // $FlowFixMe\n marginLeft = makeEm(-base.italic);\n }\n }\n var supsub;\n if (supm && subm) {\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n subShift = Math.max(subShift, metrics.sub2);\n var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n var maxWidth = 4 * ruleWidth;\n if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n subShift = maxWidth - (supShift - supm.depth) + subm.height;\n var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n if (psi > 0) {\n supShift += psi;\n subShift -= psi;\n }\n }\n var vlistElem = [\n {\n type: \"elem\",\n elem: subm,\n shift: subShift,\n marginRight,\n marginLeft\n },\n {\n type: \"elem\",\n elem: supm,\n shift: -supShift,\n marginRight\n }\n ];\n supsub = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vlistElem\n }, options);\n } else if (subm) {\n // Rule 18b\n subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n var _vlistElem = [\n {\n type: \"elem\",\n elem: subm,\n marginLeft,\n marginRight\n }\n ];\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: subShift,\n children: _vlistElem\n }, options);\n } else if (supm) {\n // Rule 18c, d\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -supShift,\n children: [\n {\n type: \"elem\",\n elem: supm,\n marginRight\n }\n ]\n }, options);\n } else {\n throw new Error(\"supsub must have either sup or sub.\");\n } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n return buildCommon.makeSpan([\n mclass\n ], [\n base,\n buildCommon.makeSpan([\n \"msupsub\"\n ], [\n supsub\n ])\n ], options);\n },\n mathmlBuilder (group, options) {\n // Is the inner group a relevant horizonal brace?\n var isBrace = false;\n var isOver;\n var isSup;\n if (group.base && group.base.type === \"horizBrace\") {\n isSup = !!group.sup;\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n group.base.parentIsSupSub = true;\n }\n var children = [\n buildGroup(group.base, options)\n ];\n if (group.sub) {\n children.push(buildGroup(group.sub, options));\n }\n if (group.sup) {\n children.push(buildGroup(group.sup, options));\n }\n var nodeType;\n if (isBrace) {\n nodeType = isOver ? \"mover\" : \"munder\";\n } else if (!group.sub) {\n var base = group.base;\n if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = \"mover\";\n } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"mover\";\n } else {\n nodeType = \"msup\";\n }\n } else if (!group.sup) {\n var _base = group.base;\n if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n nodeType = \"munder\";\n } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"munder\";\n } else {\n nodeType = \"msub\";\n }\n } else {\n var _base2 = group.base;\n if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n nodeType = \"munderover\";\n } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n nodeType = \"munderover\";\n } else {\n nodeType = \"msubsup\";\n }\n }\n return new mathMLTree.MathNode(nodeType, children);\n }\n});\ndefineFunctionBuilders({\n type: \"atom\",\n htmlBuilder (group, options) {\n return buildCommon.mathsym(group.text, group.mode, options, [\n \"m\" + group.family\n ]);\n },\n mathmlBuilder (group, options) {\n var node = new mathMLTree.MathNode(\"mo\", [\n makeText(group.text, group.mode)\n ]);\n if (group.family === \"bin\") {\n var variant = getVariant(group, options);\n if (variant === \"bold-italic\") {\n node.setAttribute(\"mathvariant\", variant);\n }\n } else if (group.family === \"punct\") {\n node.setAttribute(\"separator\", \"true\");\n } else if (group.family === \"open\" || group.family === \"close\") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n node.setAttribute(\"stretchy\", \"false\");\n }\n return node;\n }\n});\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n \"mi\": \"italic\",\n \"mn\": \"normal\",\n \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n type: \"mathord\",\n htmlBuilder (group, options) {\n return buildCommon.makeOrd(group, options, \"mathord\");\n },\n mathmlBuilder (group, options) {\n var node = new mathMLTree.MathNode(\"mi\", [\n makeText(group.text, group.mode, options)\n ]);\n var variant = getVariant(group, options) || \"italic\";\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n return node;\n }\n});\ndefineFunctionBuilders({\n type: \"textord\",\n htmlBuilder (group, options) {\n return buildCommon.makeOrd(group, options, \"textord\");\n },\n mathmlBuilder (group, options) {\n var text = makeText(group.text, group.mode, options);\n var variant = getVariant(group, options) || \"normal\";\n var node;\n if (group.mode === \"text\") {\n node = new mathMLTree.MathNode(\"mtext\", [\n text\n ]);\n } else if (/[0-9]/.test(group.text)) {\n node = new mathMLTree.MathNode(\"mn\", [\n text\n ]);\n } else if (group.text === \"\\\\prime\") {\n node = new mathMLTree.MathNode(\"mo\", [\n text\n ]);\n } else {\n node = new mathMLTree.MathNode(\"mi\", [\n text\n ]);\n }\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n return node;\n }\n});\nvar cssSpace = {\n \"\\\\nobreak\": \"nobreak\",\n \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\nvar regularSpace = {\n \" \": {},\n \"\\\\ \": {},\n \"~\": {\n className: \"nobreak\"\n },\n \"\\\\space\": {},\n \"\\\\nobreakspace\": {\n className: \"nobreak\"\n }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\ndefineFunctionBuilders({\n type: \"spacing\",\n htmlBuilder (group, options) {\n if (regularSpace.hasOwnProperty(group.text)) {\n var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n // things has an entry in the symbols table, so these will be turned\n // into appropriate outputs.\n if (group.mode === \"text\") {\n var ord = buildCommon.makeOrd(group, options, \"textord\");\n ord.classes.push(className);\n return ord;\n } else {\n return buildCommon.makeSpan([\n \"mspace\",\n className\n ], [\n buildCommon.mathsym(group.text, group.mode, options)\n ], options);\n }\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // Spaces based on just a CSS class.\n return buildCommon.makeSpan([\n \"mspace\",\n cssSpace[group.text]\n ], [], options);\n } else {\n throw new ParseError('Unknown type of space \"' + group.text + '\"');\n }\n },\n mathmlBuilder (group, options) {\n var node;\n if (regularSpace.hasOwnProperty(group.text)) {\n node = new mathMLTree.MathNode(\"mtext\", [\n new mathMLTree.TextNode(\"\\xa0\")\n ]);\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n return new mathMLTree.MathNode(\"mspace\");\n } else {\n throw new ParseError('Unknown type of space \"' + group.text + '\"');\n }\n return node;\n }\n});\nvar pad = ()=>{\n var padNode = new mathMLTree.MathNode(\"mtd\", []);\n padNode.setAttribute(\"width\", \"50%\");\n return padNode;\n};\ndefineFunctionBuilders({\n type: \"tag\",\n mathmlBuilder (group, options) {\n var table = new mathMLTree.MathNode(\"mtable\", [\n new mathMLTree.MathNode(\"mtr\", [\n pad(),\n new mathMLTree.MathNode(\"mtd\", [\n buildExpressionRow(group.body, options)\n ]),\n pad(),\n new mathMLTree.MathNode(\"mtd\", [\n buildExpressionRow(group.tag, options)\n ])\n ])\n ]);\n table.setAttribute(\"width\", \"100%\");\n return table; // TODO: Left-aligned tags.\n // Currently, the group and options passed here do not contain\n // enough info to set tag alignment. `leqno` is in Settings but it is\n // not passed to Options. On the HTML side, leqno is\n // set by a CSS class applied in buildTree.js. That would have worked\n // in MathML if browsers supported <mlabeledtr>. Since they don't, we\n // need to rewrite the way this function is called.\n }\n});\nvar textFontFamilies = {\n \"\\\\text\": undefined,\n \"\\\\textrm\": \"textrm\",\n \"\\\\textsf\": \"textsf\",\n \"\\\\texttt\": \"texttt\",\n \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n \"\\\\textbf\": \"textbf\",\n \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n \"\\\\textit\": \"textit\",\n \"\\\\textup\": \"textup\"\n};\nvar optionsWithFont = (group, options)=>{\n var font = group.font; // Checks if the argument is a font family or a font style.\n if (!font) {\n return options;\n } else if (textFontFamilies[font]) {\n return options.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return options.withTextFontWeight(textFontWeights[font]);\n } else {\n return options.withTextFontShape(textFontShapes[font]);\n }\n};\ndefineFunction({\n type: \"text\",\n names: [\n \"\\\\text\",\n \"\\\\textrm\",\n \"\\\\textsf\",\n \"\\\\texttt\",\n \"\\\\textnormal\",\n \"\\\\textbf\",\n \"\\\\textmd\",\n \"\\\\textit\",\n \"\\\\textup\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"text\"\n ],\n allowedInArgument: true,\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser, funcName } = _ref;\n var body = args[0];\n return {\n type: \"text\",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n htmlBuilder (group, options) {\n var newOptions = optionsWithFont(group, options);\n var inner = buildExpression$1(group.body, newOptions, true);\n return buildCommon.makeSpan([\n \"mord\",\n \"text\"\n ], inner, newOptions);\n },\n mathmlBuilder (group, options) {\n var newOptions = optionsWithFont(group, options);\n return buildExpressionRow(group.body, newOptions);\n }\n});\ndefineFunction({\n type: \"underline\",\n names: [\n \"\\\\underline\"\n ],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler (_ref, args) {\n var { parser } = _ref;\n return {\n type: \"underline\",\n mode: parser.mode,\n body: args[0]\n };\n },\n htmlBuilder (group, options) {\n // Underlines are handled in the TeXbook pg 443, Rule 10.\n // Build the inner group.\n var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [\n {\n type: \"kern\",\n size: defaultRuleThickness\n },\n {\n type: \"elem\",\n elem: line\n },\n {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n },\n {\n type: \"elem\",\n elem: innerGroup\n }\n ]\n }, options);\n return buildCommon.makeSpan([\n \"mord\",\n \"underline\"\n ], [\n vlist\n ], options);\n },\n mathmlBuilder (group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [\n new mathMLTree.TextNode(\"‾\")\n ]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"munder\", [\n buildGroup(group.body, options),\n operator\n ]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n});\ndefineFunction({\n type: \"vcenter\",\n names: [\n \"\\\\vcenter\"\n ],\n props: {\n numArgs: 1,\n argTypes: [\n \"original\"\n ],\n // In LaTeX, \\vcenter can act only on a box.\n allowedInText: false\n },\n handler (_ref, args) {\n var { parser } = _ref;\n return {\n type: \"vcenter\",\n mode: parser.mode,\n body: args[0]\n };\n },\n htmlBuilder (group, options) {\n var body = buildGroup$1(group.body, options);\n var axisHeight = options.fontMetrics().axisHeight;\n var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: dy,\n children: [\n {\n type: \"elem\",\n elem: body\n }\n ]\n }, options);\n },\n mathmlBuilder (group, options) {\n // There is no way to do this in MathML.\n // Write a class as a breadcrumb in case some post-processor wants\n // to perform a vcenter adjustment.\n return new mathMLTree.MathNode(\"mpadded\", [\n buildGroup(group.body, options)\n ], [\n \"vcenter\"\n ]);\n }\n});\ndefineFunction({\n type: \"verb\",\n names: [\n \"\\\\verb\"\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler (context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it's because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n },\n htmlBuilder (group, options) {\n var text = makeVerb(group);\n var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n var newOptions = options.havingStyle(options.style.text());\n for(var i = 0; i < text.length; i++){\n var c = text[i];\n if (c === \"~\") {\n c = \"\\\\textasciitilde\";\n }\n body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\n \"mord\",\n \"texttt\"\n ]));\n }\n return buildCommon.makeSpan([\n \"mord\",\n \"text\"\n ].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n },\n mathmlBuilder (group, options) {\n var text = new mathMLTree.TextNode(makeVerb(group));\n var node = new mathMLTree.MathNode(\"mtext\", [\n text\n ]);\n node.setAttribute(\"mathvariant\", \"monospace\");\n return node;\n }\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */ var makeVerb = (group)=>group.body.replace(/ /g, group.star ? \"␣\" : \"\\xa0\");\n/** Include this to ensure that all functions are defined. */ var functions = _functions;\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */ /* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */ var spaceRegexString = \"[ \\r\\n\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\t]+\\n?)[ \\r\t]*\";\nvar combiningDiacriticalMarkString = \"[̀-ͯ]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + (controlSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-‧-豈-]\" + (combiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + (combiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + (\"|\" + controlWordWhitespaceRegexString) + (\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n/** Main Lexer class */ class Lexer {\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n constructor(input, settings){\n this.input = void 0;\n this.settings = void 0;\n this.tokenRegex = void 0;\n this.catcodes = void 0;\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, \"g\");\n this.catcodes = {\n \"%\": 14,\n // comment character\n \"~\": 13 // active character\n };\n }\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n /**\n * This function lexes a single token.\n */ lex() {\n var input = this.input;\n var pos = this.tokenRegex.lastIndex;\n if (pos === input.length) {\n return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n }\n var match = this.tokenRegex.exec(input);\n if (match === null || match.index !== pos) {\n throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n }\n var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n if (this.catcodes[text] === 14) {\n // comment character\n var nlIndex = input.indexOf(\"\\n\", this.tokenRegex.lastIndex);\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n return this.lex();\n }\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n}\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */ class Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */ constructor(builtins, globalMacros){\n if (builtins === void 0) {\n builtins = {};\n }\n if (globalMacros === void 0) {\n globalMacros = {};\n }\n this.current = void 0;\n this.builtins = void 0;\n this.undefStack = void 0;\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n /**\n * Start a new nested group, affecting future local `set`s.\n */ beginGroup() {\n this.undefStack.push({});\n }\n /**\n * End current nested group, restoring values before the group began.\n */ endGroup() {\n if (this.undefStack.length === 0) {\n throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n }\n var undefs = this.undefStack.pop();\n for(var undef in undefs){\n if (undefs.hasOwnProperty(undef)) {\n if (undefs[undef] == null) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */ endGroups() {\n while(this.undefStack.length > 0){\n this.endGroup();\n }\n }\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */ has(name) {\n return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n }\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */ get(name) {\n if (this.current.hasOwnProperty(name)) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n * A value of undefined means to delete existing definitions.\n */ set(name, value, global) {\n if (global === void 0) {\n global = false;\n }\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for(var i = 0; i < this.undefStack.length; i++){\n delete this.undefStack[i][name];\n }\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n var top = this.undefStack[this.undefStack.length - 1];\n if (top && !top.hasOwnProperty(name)) {\n top[name] = this.current[name];\n }\n }\n if (value == null) {\n delete this.current[name];\n } else {\n this.current[name] = value;\n }\n }\n}\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */ var macros = _macros;\n// macro tools\ndefineMacro(\"\\\\noexpand\", function(context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were ‘\\relax’ if it is a control sequence that\n // would ordinarily be expanded by TeX’s expansion rules.\n var t = context.popToken();\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n return {\n tokens: [\n t\n ],\n numArgs: 0\n };\n});\ndefineMacro(\"\\\\expandafter\", function(context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; let’s call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n var t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n return {\n tokens: [\n t\n ],\n numArgs: 0\n };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\ndefineMacro(\"\\\\@firstoftwo\", function(context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[0],\n numArgs: 0\n };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\ndefineMacro(\"\\\\@secondoftwo\", function(context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[1],\n numArgs: 0\n };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\ndefineMacro(\"\\\\@ifnextchar\", function(context) {\n var args = context.consumeArgs(3); // symbol, if, else\n context.consumeSpaces();\n var nextToken = context.future();\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return {\n tokens: args[1],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[2],\n numArgs: 0\n };\n }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\ndefineMacro(\"\\\\TextOrMath\", function(context) {\n var args = context.consumeArgs(2);\n if (context.mode === \"text\") {\n return {\n tokens: args[0],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[1],\n numArgs: 0\n };\n }\n}); // Lookup table for parsing numbers in base 8 through 16\nvar digitToNumber = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"a\": 10,\n \"A\": 10,\n \"b\": 11,\n \"B\": 11,\n \"c\": 12,\n \"C\": 12,\n \"d\": 13,\n \"D\": 13,\n \"e\": 14,\n \"E\": 14,\n \"f\": 15,\n \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char'123 -- octal\n// \\char\"123 -- hex\n// \\char`x -- character that can be written (i.e. isn't active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\ndefineMacro(\"\\\\char\", function(context) {\n var token = context.popToken();\n var base;\n var number = \"\";\n if (token.text === \"'\") {\n base = 8;\n token = context.popToken();\n } else if (token.text === '\"') {\n base = 16;\n token = context.popToken();\n } else if (token.text === \"`\") {\n token = context.popToken();\n if (token.text[0] === \"\\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === \"EOF\") {\n throw new ParseError(\"\\\\char` missing argument\");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n number = digitToNumber[token.text];\n if (number == null || number >= base) {\n throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n }\n var digit;\n while((digit = digitToNumber[context.future().text]) != null && digit < base){\n number *= base;\n number += digit;\n context.popToken();\n }\n }\n return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\nvar newcommand = (context, existsOK, nonexistsOK)=>{\n var arg = context.consumeArg().tokens;\n if (arg.length !== 1) {\n throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n }\n var name = arg[0].text;\n var exists = context.isDefined(name);\n if (exists && !existsOK) {\n throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n }\n if (!exists && !nonexistsOK) {\n throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n }\n var numArgs = 0;\n arg = context.consumeArg().tokens;\n if (arg.length === 1 && arg[0].text === \"[\") {\n var argText = \"\";\n var token = context.expandNextToken();\n while(token.text !== \"]\" && token.text !== \"EOF\"){\n // TODO: Should properly expand arg, e.g., ignore {}s\n argText += token.text;\n token = context.expandNextToken();\n }\n if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n throw new ParseError(\"Invalid number of arguments: \" + argText);\n }\n numArgs = parseInt(argText);\n arg = context.consumeArg().tokens;\n } // Final arg is the expansion of the macro\n context.macros.set(name, {\n tokens: arg,\n numArgs\n });\n return \"\";\n};\ndefineMacro(\"\\\\newcommand\", (context)=>newcommand(context, false, true));\ndefineMacro(\"\\\\renewcommand\", (context)=>newcommand(context, true, false));\ndefineMacro(\"\\\\providecommand\", (context)=>newcommand(context, true, true)); // terminal (console) tools\ndefineMacro(\"\\\\message\", (context)=>{\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n console.log(arg.reverse().map((token)=>token.text).join(\"\"));\n return \"\";\n});\ndefineMacro(\"\\\\errmessage\", (context)=>{\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n console.error(arg.reverse().map((token)=>token.text).join(\"\"));\n return \"\";\n});\ndefineMacro(\"\\\\show\", (context)=>{\n var tok = context.popToken();\n var name = tok.text; // eslint-disable-next-line no-console\n console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n return \"\";\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n// \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n// \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`\\xa9}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`\\xae}\"); // Characters omitted from Unicode range 1D400–1D7FF\ndefineMacro(\"ℬ\", \"\\\\mathscr{B}\"); // script\ndefineMacro(\"ℰ\", \"\\\\mathscr{E}\");\ndefineMacro(\"ℱ\", \"\\\\mathscr{F}\");\ndefineMacro(\"ℋ\", \"\\\\mathscr{H}\");\ndefineMacro(\"ℐ\", \"\\\\mathscr{I}\");\ndefineMacro(\"ℒ\", \"\\\\mathscr{L}\");\ndefineMacro(\"ℳ\", \"\\\\mathscr{M}\");\ndefineMacro(\"ℛ\", \"\\\\mathscr{R}\");\ndefineMacro(\"ℭ\", \"\\\\mathfrak{C}\"); // Fraktur\ndefineMacro(\"ℌ\", \"\\\\mathfrak{H}\");\ndefineMacro(\"ℨ\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\ndefineMacro(\"\\xb7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right. We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n// \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`≠}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"≠\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`∉}}\");\ndefineMacro(\"∉\", \"\\\\notin\"); // Unicode stacked relations\ndefineMacro(\"≘\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`≘}}\");\ndefineMacro(\"≙\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`≘}}\");\ndefineMacro(\"≚\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`≚}}\");\ndefineMacro(\"≛\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`≛}}\");\ndefineMacro(\"≝\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`≝}}\");\ndefineMacro(\"≞\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`≞}}\");\ndefineMacro(\"≟\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`≟}}\"); // Misc Unicode\ndefineMacro(\"⟂\", \"\\\\perp\");\ndefineMacro(\"‼\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"∌\", \"\\\\notni\");\ndefineMacro(\"⌜\", \"\\\\ulcorner\");\ndefineMacro(\"⌝\", \"\\\\urcorner\");\ndefineMacro(\"⌞\", \"\\\\llcorner\");\ndefineMacro(\"⌟\", \"\\\\lrcorner\");\ndefineMacro(\"\\xa9\", \"\\\\copyright\");\ndefineMacro(\"\\xae\", \"\\\\textregistered\");\ndefineMacro(\"️\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\ndefineMacro(\"\\\\ulcorner\", '\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\"231c}}');\ndefineMacro(\"\\\\urcorner\", '\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\"231d}}');\ndefineMacro(\"\\\\llcorner\", '\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\"231e}}');\ndefineMacro(\"\\\\lrcorner\", '\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\"231f}}'); //////////////////////////////////////////////////////////////////////\n// LaTeX_2ε\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\ndefineMacro(\"\\\\vdots\", \"\\\\mathord{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"⋮\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters. AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\nvar dotsByToken = {\n \",\": \"\\\\dotsc\",\n \"\\\\not\": \"\\\\dotsb\",\n // \\keybin@ checks for the following:\n \"+\": \"\\\\dotsb\",\n \"=\": \"\\\\dotsb\",\n \"<\": \"\\\\dotsb\",\n \">\": \"\\\\dotsb\",\n \"-\": \"\\\\dotsb\",\n \"*\": \"\\\\dotsb\",\n \":\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\DOTSB:\n \"\\\\DOTSB\": \"\\\\dotsb\",\n \"\\\\coprod\": \"\\\\dotsb\",\n \"\\\\bigvee\": \"\\\\dotsb\",\n \"\\\\bigwedge\": \"\\\\dotsb\",\n \"\\\\biguplus\": \"\\\\dotsb\",\n \"\\\\bigcap\": \"\\\\dotsb\",\n \"\\\\bigcup\": \"\\\\dotsb\",\n \"\\\\prod\": \"\\\\dotsb\",\n \"\\\\sum\": \"\\\\dotsb\",\n \"\\\\bigotimes\": \"\\\\dotsb\",\n \"\\\\bigoplus\": \"\\\\dotsb\",\n \"\\\\bigodot\": \"\\\\dotsb\",\n \"\\\\bigsqcup\": \"\\\\dotsb\",\n \"\\\\And\": \"\\\\dotsb\",\n \"\\\\longrightarrow\": \"\\\\dotsb\",\n \"\\\\Longrightarrow\": \"\\\\dotsb\",\n \"\\\\longleftarrow\": \"\\\\dotsb\",\n \"\\\\Longleftarrow\": \"\\\\dotsb\",\n \"\\\\longleftrightarrow\": \"\\\\dotsb\",\n \"\\\\Longleftrightarrow\": \"\\\\dotsb\",\n \"\\\\mapsto\": \"\\\\dotsb\",\n \"\\\\longmapsto\": \"\\\\dotsb\",\n \"\\\\hookrightarrow\": \"\\\\dotsb\",\n \"\\\\doteq\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\mathbin:\n \"\\\\mathbin\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\mathrel:\n \"\\\\mathrel\": \"\\\\dotsb\",\n \"\\\\relbar\": \"\\\\dotsb\",\n \"\\\\Relbar\": \"\\\\dotsb\",\n \"\\\\xrightarrow\": \"\\\\dotsb\",\n \"\\\\xleftarrow\": \"\\\\dotsb\",\n // Symbols whose definition starts with \\DOTSI:\n \"\\\\DOTSI\": \"\\\\dotsi\",\n \"\\\\int\": \"\\\\dotsi\",\n \"\\\\oint\": \"\\\\dotsi\",\n \"\\\\iint\": \"\\\\dotsi\",\n \"\\\\iiint\": \"\\\\dotsi\",\n \"\\\\iiiint\": \"\\\\dotsi\",\n \"\\\\idotsint\": \"\\\\dotsi\",\n // Symbols whose definition starts with \\DOTSX:\n \"\\\\DOTSX\": \"\\\\dotsx\"\n};\ndefineMacro(\"\\\\dots\", function(context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in KaTeX, \\textellipsis and \\ldots behave the same\n // (in text mode), and it's unlikely we'd see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n var thedots = \"\\\\dotso\";\n var next = context.expandAfterFuture().text;\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === \"\\\\not\") {\n thedots = \"\\\\dotsb\";\n } else if (next in symbols.math) {\n if (utils.contains([\n \"bin\",\n \"rel\"\n ], symbols.math[next].group)) {\n thedots = \"\\\\dotsb\";\n }\n }\n return thedots;\n});\nvar spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n \")\": true,\n \"]\": true,\n \"\\\\rbrack\": true,\n \"\\\\}\": true,\n \"\\\\rbrace\": true,\n \"\\\\rangle\": true,\n \"\\\\rceil\": true,\n \"\\\\rfloor\": true,\n \"\\\\rgroup\": true,\n \"\\\\rmoustache\": true,\n \"\\\\right\": true,\n \"\\\\bigr\": true,\n \"\\\\biggr\": true,\n \"\\\\Bigr\": true,\n \"\\\\Biggr\": true,\n // \\extra@ also tests for the following:\n \"$\": true,\n // \\extrap@ checks for the following:\n \";\": true,\n \".\": true,\n \",\": true\n};\ndefineMacro(\"\\\\dotso\", function(context) {\n var next = context.future().text;\n if (next in spaceAfterDots) {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\dotsc\", function(context) {\n var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // ';' and '.', but doesn't check for ','.\n if (next in spaceAfterDots && next !== \",\") {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\cdots\", function(context) {\n var next = context.future().text;\n if (next in spaceAfterDots) {\n return \"\\\\@cdots\\\\,\";\n } else {\n return \"\\\\@cdots\";\n }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", (context)=>{\n if (context.macros.get(\"\\\\df@tag\")) {\n throw new ParseError(\"Multiple \\\\tag\");\n }\n return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails. KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n// {\\sbox\\z@ T%\n// \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n// \\fontsize\\sf@size\\z@\n// \\math@fontsfalse\\selectfont\n// A}%\n// \\vss}%\n// }%\n// \\kern-.15em%\n// \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\nvar latexRaiseA = makeEm(fontMetricsData[\"Main-Regular\"][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData[\"Main-Regular\"][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2237}}'); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + '{\\\\mathop{\\\\char\"2254}}'); // ≔\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"3d}}'); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"2212}}'); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"2212}}'); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2255}}'); // ≕\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + '{\\\\mathop{\\\\char\"3d\\\\char\"2237}}'); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + '{\\\\mathop{\\\\char\"2239}}'); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + '{\\\\mathop{\\\\char\"2212\\\\char\"2237}}'); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"2248}}'); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"2248}}'); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + '{\\\\mathop{\\\\char\"3a\\\\char\"223c}}'); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + '{\\\\mathop{\\\\char\"2237\\\\char\"223c}}'); // Some Unicode characters are implemented with macros to mathtools functions.\ndefineMacro(\"∷\", \"\\\\dblcolon\"); // ::\ndefineMacro(\"∹\", \"\\\\eqcolon\"); // -:\ndefineMacro(\"≔\", \"\\\\coloneqq\"); // :=\ndefineMacro(\"≕\", \"\\\\eqqcolon\"); // =:\ndefineMacro(\"⩴\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`∌}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{≩}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{≨}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{≱}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{≱}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{≰}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{≰}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{∤}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{∦}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{⊈}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{⊉}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{⊊}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{⫋}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{⊋}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{⫌}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{ı}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{ȷ}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`⟦}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`⟧}}\");\ndefineMacro(\"⟦\", \"\\\\llbracket\"); // blackboard bold [\ndefineMacro(\"⟧\", \"\\\\rrbracket\"); // blackboard bold ]\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`⦃}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`⦄}}\");\ndefineMacro(\"⦃\", \"\\\\lBrace\"); // blackboard bold {\ndefineMacro(\"⦄\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`⦵}}\");\ndefineMacro(\"⦵\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\nvar braketHelper = (one)=>(context)=>{\n var left = context.consumeArg().tokens;\n var middle = context.consumeArg().tokens;\n var middleDouble = context.consumeArg().tokens;\n var right = context.consumeArg().tokens;\n var oldMiddle = context.macros.get(\"|\");\n var oldMiddleDouble = context.macros.get(\"\\\\|\");\n context.macros.beginGroup();\n var midMacro = (double)=>(context)=>{\n if (one) {\n // Only modify the first instance of | or \\|\n context.macros.set(\"|\", oldMiddle);\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", oldMiddleDouble);\n }\n }\n var doubled = double;\n if (!double && middleDouble.length) {\n // Mimic \\@ifnextchar\n var nextToken = context.future();\n if (nextToken.text === \"|\") {\n context.popToken();\n doubled = true;\n }\n }\n return {\n tokens: doubled ? middleDouble : middle,\n numArgs: 0\n };\n };\n context.macros.set(\"|\", midMacro(false));\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", midMacro(true));\n }\n var arg = context.consumeArg().tokens;\n var expanded = context.expandTokens([\n ...right,\n ...arg,\n ...left // reversed\n ]);\n context.macros.endGroup();\n return {\n tokens: expanded.reverse(),\n numArgs: 0\n };\n };\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n/**\n * This file contains the “gullet” where macros are expanded\n * until only non-macro tokens remain.\n */ // List of commands that act like macros but aren't defined as a macro,\n// function, or symbol. Used in `isDefined`.\nvar implicitCommands = {\n \"^\": true,\n // Parser.js\n \"_\": true,\n // Parser.js\n \"\\\\limits\": true,\n // Parser.js\n \"\\\\nolimits\": true // Parser.js\n};\nclass MacroExpander {\n constructor(input, settings, mode){\n this.settings = void 0;\n this.expansionCount = void 0;\n this.lexer = void 0;\n this.macros = void 0;\n this.stack = void 0;\n this.mode = void 0;\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input); // Make new global namespace\n this.macros = new Namespace(macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */ feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */ switchMode(newMode) {\n this.mode = newMode;\n }\n /**\n * Start a new group nesting within all namespaces.\n */ beginGroup() {\n this.macros.beginGroup();\n }\n /**\n * End current group nesting within all namespaces.\n */ endGroup() {\n this.macros.endGroup();\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */ endGroups() {\n this.macros.endGroups();\n }\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX's `\\futurelet`.\n */ future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n return this.stack[this.stack.length - 1];\n }\n /**\n * Remove and return the next unexpanded token.\n */ popToken() {\n this.future(); // ensure non-empty stack\n return this.stack.pop();\n }\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */ pushToken(token) {\n this.stack.push(token);\n }\n /**\n * Append an array of tokens to the token stack.\n */ pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */ scanArgument(isOptional) {\n var start;\n var end;\n var tokens;\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n if (this.future().text !== \"[\") {\n return null;\n }\n start = this.popToken(); // don't include [ in tokens\n ({ tokens, end } = this.consumeArg([\n \"]\"\n ]));\n } else {\n ({ tokens, start, end } = this.consumeArg());\n } // indicate the end of an argument\n this.pushToken(new Token(\"EOF\", end.loc));\n this.pushTokens(tokens);\n return start.range(end, \"\");\n }\n /**\n * Consume all following space tokens, without expansion.\n */ consumeSpaces() {\n for(;;){\n var token = this.future();\n if (token.text === \" \") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */ consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is ‘{’, when the argument will be the\n // entire {...} group that follows.\n var tokens = [];\n var isDelimited = delims && delims.length > 0;\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // \"After you have said ‘\\def\\row#1#2{...}’, you are allowed to\n // put spaces between the arguments (e.g., ‘\\row x n’), because\n // TeX doesn’t use single spaces as undelimited arguments.\"\n this.consumeSpaces();\n }\n var start = this.future();\n var tok;\n var depth = 0;\n var match = 0;\n do {\n tok = this.popToken();\n tokens.push(tok);\n if (tok.text === \"{\") {\n ++depth;\n } else if (tok.text === \"}\") {\n --depth;\n if (depth === -1) {\n throw new ParseError(\"Extra }\", tok);\n }\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n }\n if (delims && isDelimited) {\n if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n ++match;\n if (match === delims.length) {\n // don't include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n }while (depth !== 0 || isDelimited); // If the argument found ... has the form ‘{<nested tokens>}’,\n // ... the outermost braces enclosing the argument are removed\n if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n tokens.pop();\n tokens.shift();\n }\n tokens.reverse(); // to fit in with stack order\n return {\n tokens,\n start,\n end: tok\n };\n }\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */ consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n }\n var delims = delimiters[0];\n for(var i = 0; i < delims.length; i++){\n var tok = this.popToken();\n if (delims[i] !== tok.text) {\n throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n }\n }\n }\n var args = [];\n for(var _i = 0; _i < numArgs; _i++){\n args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n }\n return args;\n }\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */ expandOnce(expandableOnly) {\n var topToken = this.popToken();\n var name = topToken.text;\n var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n if (expansion == null || expandableOnly && expansion.unexpandable) {\n if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n throw new ParseError(\"Undefined control sequence: \" + name);\n }\n this.pushToken(topToken);\n return false;\n }\n this.expansionCount++;\n if (this.expansionCount > this.settings.maxExpand) {\n throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n }\n var tokens = expansion.tokens;\n var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n for(var i = tokens.length - 1; i >= 0; --i){\n var tok = tokens[i];\n if (tok.text === \"#\") {\n if (i === 0) {\n throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n }\n tok = tokens[--i]; // next token on stack\n if (tok.text === \"#\") {\n // ## → #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new ParseError(\"Not a valid argument number\", tok);\n }\n }\n }\n } // Concatenate expansion onto top of stack.\n this.pushTokens(tokens);\n return tokens.length;\n }\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */ expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n /**\n * Recursively expand first token, then return first non-expandable token.\n */ expandNextToken() {\n for(;;){\n if (this.expandOnce() === false) {\n // fully expanded\n var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n // were ‘\\relax’\n if (token.treatAsRelax) {\n token.text = \"\\\\relax\";\n }\n return token;\n }\n } // Flow unable to figure out that this pathway is impossible.\n // https://github.com/facebook/flow/issues/4808\n throw new Error(); // eslint-disable-line no-unreachable\n }\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */ expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([\n new Token(name)\n ]) : undefined;\n }\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */ expandTokens(tokens) {\n var output = [];\n var oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n while(this.stack.length > oldStackLength){\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) {\n // fully expanded\n var token = this.stack.pop();\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n output.push(token);\n }\n }\n return output;\n }\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */ expandMacroAsText(name) {\n var tokens = this.expandMacro(name);\n if (tokens) {\n return tokens.map((token)=>token.text).join(\"\");\n } else {\n return tokens;\n }\n }\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */ _getExpansion(name) {\n var definition = this.macros.get(name);\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n } // If a single character has an associated catcode other than 13\n // (active character), then don't expand it.\n if (name.length === 1) {\n var catcode = this.lexer.catcodes[name];\n if (catcode != null && catcode !== 13) {\n return;\n }\n }\n var expansion = typeof definition === \"function\" ? definition(this) : definition;\n if (typeof expansion === \"string\") {\n var numArgs = 0;\n if (expansion.indexOf(\"#\") !== -1) {\n var stripped = expansion.replace(/##/g, \"\");\n while(stripped.indexOf(\"#\" + (numArgs + 1)) !== -1){\n ++numArgs;\n }\n }\n var bodyLexer = new Lexer(expansion, this.settings);\n var tokens = [];\n var tok = bodyLexer.lex();\n while(tok.text !== \"EOF\"){\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n tokens.reverse(); // to fit in with stack using push and pop\n var expanded = {\n tokens,\n numArgs\n };\n return expanded;\n }\n return expansion;\n }\n /**\n * Determine whether a command is currently \"defined\" (has some\n * functionality), meaning that it's a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */ isDefined(name) {\n return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n }\n /**\n * Determine whether a command is expandable.\n */ isExpandable(name) {\n var macro = this.macros.get(name);\n return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n }\n}\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/;\nvar uSubsAndSups = Object.freeze({\n \"₊\": \"+\",\n \"₋\": \"-\",\n \"₌\": \"=\",\n \"₍\": \"(\",\n \"₎\": \")\",\n \"₀\": \"0\",\n \"₁\": \"1\",\n \"₂\": \"2\",\n \"₃\": \"3\",\n \"₄\": \"4\",\n \"₅\": \"5\",\n \"₆\": \"6\",\n \"₇\": \"7\",\n \"₈\": \"8\",\n \"₉\": \"9\",\n \"ₐ\": \"a\",\n \"ₑ\": \"e\",\n \"ₕ\": \"h\",\n \"ᵢ\": \"i\",\n \"ⱼ\": \"j\",\n \"ₖ\": \"k\",\n \"ₗ\": \"l\",\n \"ₘ\": \"m\",\n \"ₙ\": \"n\",\n \"ₒ\": \"o\",\n \"ₚ\": \"p\",\n \"ᵣ\": \"r\",\n \"ₛ\": \"s\",\n \"ₜ\": \"t\",\n \"ᵤ\": \"u\",\n \"ᵥ\": \"v\",\n \"ₓ\": \"x\",\n \"ᵦ\": \"β\",\n \"ᵧ\": \"γ\",\n \"ᵨ\": \"ρ\",\n \"ᵩ\": \"ϕ\",\n \"ᵪ\": \"χ\",\n \"⁺\": \"+\",\n \"⁻\": \"-\",\n \"⁼\": \"=\",\n \"⁽\": \"(\",\n \"⁾\": \")\",\n \"⁰\": \"0\",\n \"\\xb9\": \"1\",\n \"\\xb2\": \"2\",\n \"\\xb3\": \"3\",\n \"⁴\": \"4\",\n \"⁵\": \"5\",\n \"⁶\": \"6\",\n \"⁷\": \"7\",\n \"⁸\": \"8\",\n \"⁹\": \"9\",\n \"ᴬ\": \"A\",\n \"ᴮ\": \"B\",\n \"ᴰ\": \"D\",\n \"ᴱ\": \"E\",\n \"ᴳ\": \"G\",\n \"ᴴ\": \"H\",\n \"ᴵ\": \"I\",\n \"ᴶ\": \"J\",\n \"ᴷ\": \"K\",\n \"ᴸ\": \"L\",\n \"ᴹ\": \"M\",\n \"ᴺ\": \"N\",\n \"ᴼ\": \"O\",\n \"ᴾ\": \"P\",\n \"ᴿ\": \"R\",\n \"ᵀ\": \"T\",\n \"ᵁ\": \"U\",\n \"ⱽ\": \"V\",\n \"ᵂ\": \"W\",\n \"ᵃ\": \"a\",\n \"ᵇ\": \"b\",\n \"ᶜ\": \"c\",\n \"ᵈ\": \"d\",\n \"ᵉ\": \"e\",\n \"ᶠ\": \"f\",\n \"ᵍ\": \"g\",\n \"ʰ\": \"h\",\n \"ⁱ\": \"i\",\n \"ʲ\": \"j\",\n \"ᵏ\": \"k\",\n \"ˡ\": \"l\",\n \"ᵐ\": \"m\",\n \"ⁿ\": \"n\",\n \"ᵒ\": \"o\",\n \"ᵖ\": \"p\",\n \"ʳ\": \"r\",\n \"ˢ\": \"s\",\n \"ᵗ\": \"t\",\n \"ᵘ\": \"u\",\n \"ᵛ\": \"v\",\n \"ʷ\": \"w\",\n \"ˣ\": \"x\",\n \"ʸ\": \"y\",\n \"ᶻ\": \"z\",\n \"ᵝ\": \"β\",\n \"ᵞ\": \"γ\",\n \"ᵟ\": \"δ\",\n \"ᵠ\": \"ϕ\",\n \"ᵡ\": \"χ\",\n \"ᶿ\": \"θ\"\n});\n/* eslint no-constant-condition:0 */ var unicodeAccents = {\n \"́\": {\n \"text\": \"\\\\'\",\n \"math\": \"\\\\acute\"\n },\n \"̀\": {\n \"text\": \"\\\\`\",\n \"math\": \"\\\\grave\"\n },\n \"̈\": {\n \"text\": '\\\\\"',\n \"math\": \"\\\\ddot\"\n },\n \"̃\": {\n \"text\": \"\\\\~\",\n \"math\": \"\\\\tilde\"\n },\n \"̄\": {\n \"text\": \"\\\\=\",\n \"math\": \"\\\\bar\"\n },\n \"̆\": {\n \"text\": \"\\\\u\",\n \"math\": \"\\\\breve\"\n },\n \"̌\": {\n \"text\": \"\\\\v\",\n \"math\": \"\\\\check\"\n },\n \"̂\": {\n \"text\": \"\\\\^\",\n \"math\": \"\\\\hat\"\n },\n \"̇\": {\n \"text\": \"\\\\.\",\n \"math\": \"\\\\dot\"\n },\n \"̊\": {\n \"text\": \"\\\\r\",\n \"math\": \"\\\\mathring\"\n },\n \"̋\": {\n \"text\": \"\\\\H\"\n },\n \"̧\": {\n \"text\": \"\\\\c\"\n }\n};\nvar unicodeSymbols = {\n \"\\xe1\": \"á\",\n \"\\xe0\": \"à\",\n \"\\xe4\": \"ä\",\n \"ǟ\": \"ǟ\",\n \"\\xe3\": \"ã\",\n \"ā\": \"ā\",\n \"ă\": \"ă\",\n \"ắ\": \"ắ\",\n \"ằ\": \"ằ\",\n \"ẵ\": \"ẵ\",\n \"ǎ\": \"ǎ\",\n \"\\xe2\": \"â\",\n \"ấ\": \"ấ\",\n \"ầ\": \"ầ\",\n \"ẫ\": \"ẫ\",\n \"ȧ\": \"ȧ\",\n \"ǡ\": \"ǡ\",\n \"\\xe5\": \"å\",\n \"ǻ\": \"ǻ\",\n \"ḃ\": \"ḃ\",\n \"ć\": \"ć\",\n \"ḉ\": \"ḉ\",\n \"č\": \"č\",\n \"ĉ\": \"ĉ\",\n \"ċ\": \"ċ\",\n \"\\xe7\": \"ç\",\n \"ď\": \"ď\",\n \"ḋ\": \"ḋ\",\n \"ḑ\": \"ḑ\",\n \"\\xe9\": \"é\",\n \"\\xe8\": \"è\",\n \"\\xeb\": \"ë\",\n \"ẽ\": \"ẽ\",\n \"ē\": \"ē\",\n \"ḗ\": \"ḗ\",\n \"ḕ\": \"ḕ\",\n \"ĕ\": \"ĕ\",\n \"ḝ\": \"ḝ\",\n \"ě\": \"ě\",\n \"\\xea\": \"ê\",\n \"ế\": \"ế\",\n \"ề\": \"ề\",\n \"ễ\": \"ễ\",\n \"ė\": \"ė\",\n \"ȩ\": \"ȩ\",\n \"ḟ\": \"ḟ\",\n \"ǵ\": \"ǵ\",\n \"ḡ\": \"ḡ\",\n \"ğ\": \"ğ\",\n \"ǧ\": \"ǧ\",\n \"ĝ\": \"ĝ\",\n \"ġ\": \"ġ\",\n \"ģ\": \"ģ\",\n \"ḧ\": \"ḧ\",\n \"ȟ\": \"ȟ\",\n \"ĥ\": \"ĥ\",\n \"ḣ\": \"ḣ\",\n \"ḩ\": \"ḩ\",\n \"\\xed\": \"í\",\n \"\\xec\": \"ì\",\n \"\\xef\": \"ï\",\n \"ḯ\": \"ḯ\",\n \"ĩ\": \"ĩ\",\n \"ī\": \"ī\",\n \"ĭ\": \"ĭ\",\n \"ǐ\": \"ǐ\",\n \"\\xee\": \"î\",\n \"ǰ\": \"ǰ\",\n \"ĵ\": \"ĵ\",\n \"ḱ\": \"ḱ\",\n \"ǩ\": \"ǩ\",\n \"ķ\": \"ķ\",\n \"ĺ\": \"ĺ\",\n \"ľ\": \"ľ\",\n \"ļ\": \"ļ\",\n \"ḿ\": \"ḿ\",\n \"ṁ\": \"ṁ\",\n \"ń\": \"ń\",\n \"ǹ\": \"ǹ\",\n \"\\xf1\": \"ñ\",\n \"ň\": \"ň\",\n \"ṅ\": \"ṅ\",\n \"ņ\": \"ņ\",\n \"\\xf3\": \"ó\",\n \"\\xf2\": \"ò\",\n \"\\xf6\": \"ö\",\n \"ȫ\": \"ȫ\",\n \"\\xf5\": \"õ\",\n \"ṍ\": \"ṍ\",\n \"ṏ\": \"ṏ\",\n \"ȭ\": \"ȭ\",\n \"ō\": \"ō\",\n \"ṓ\": \"ṓ\",\n \"ṑ\": \"ṑ\",\n \"ŏ\": \"ŏ\",\n \"ǒ\": \"ǒ\",\n \"\\xf4\": \"ô\",\n \"ố\": \"ố\",\n \"ồ\": \"ồ\",\n \"ỗ\": \"ỗ\",\n \"ȯ\": \"ȯ\",\n \"ȱ\": \"ȱ\",\n \"ő\": \"ő\",\n \"ṕ\": \"ṕ\",\n \"ṗ\": \"ṗ\",\n \"ŕ\": \"ŕ\",\n \"ř\": \"ř\",\n \"ṙ\": \"ṙ\",\n \"ŗ\": \"ŗ\",\n \"ś\": \"ś\",\n \"ṥ\": \"ṥ\",\n \"š\": \"š\",\n \"ṧ\": \"ṧ\",\n \"ŝ\": \"ŝ\",\n \"ṡ\": \"ṡ\",\n \"ş\": \"ş\",\n \"ẗ\": \"ẗ\",\n \"ť\": \"ť\",\n \"ṫ\": \"ṫ\",\n \"ţ\": \"ţ\",\n \"\\xfa\": \"ú\",\n \"\\xf9\": \"ù\",\n \"\\xfc\": \"ü\",\n \"ǘ\": \"ǘ\",\n \"ǜ\": \"ǜ\",\n \"ǖ\": \"ǖ\",\n \"ǚ\": \"ǚ\",\n \"ũ\": \"ũ\",\n \"ṹ\": \"ṹ\",\n \"ū\": \"ū\",\n \"ṻ\": \"ṻ\",\n \"ŭ\": \"ŭ\",\n \"ǔ\": \"ǔ\",\n \"\\xfb\": \"û\",\n \"ů\": \"ů\",\n \"ű\": \"ű\",\n \"ṽ\": \"ṽ\",\n \"ẃ\": \"ẃ\",\n \"ẁ\": \"ẁ\",\n \"ẅ\": \"ẅ\",\n \"ŵ\": \"ŵ\",\n \"ẇ\": \"ẇ\",\n \"ẘ\": \"ẘ\",\n \"ẍ\": \"ẍ\",\n \"ẋ\": \"ẋ\",\n \"\\xfd\": \"ý\",\n \"ỳ\": \"ỳ\",\n \"\\xff\": \"ÿ\",\n \"ỹ\": \"ỹ\",\n \"ȳ\": \"ȳ\",\n \"ŷ\": \"ŷ\",\n \"ẏ\": \"ẏ\",\n \"ẙ\": \"ẙ\",\n \"ź\": \"ź\",\n \"ž\": \"ž\",\n \"ẑ\": \"ẑ\",\n \"ż\": \"ż\",\n \"\\xc1\": \"Á\",\n \"\\xc0\": \"À\",\n \"\\xc4\": \"Ä\",\n \"Ǟ\": \"Ǟ\",\n \"\\xc3\": \"Ã\",\n \"Ā\": \"Ā\",\n \"Ă\": \"Ă\",\n \"Ắ\": \"Ắ\",\n \"Ằ\": \"Ằ\",\n \"Ẵ\": \"Ẵ\",\n \"Ǎ\": \"Ǎ\",\n \"\\xc2\": \"Â\",\n \"Ấ\": \"Ấ\",\n \"Ầ\": \"Ầ\",\n \"Ẫ\": \"Ẫ\",\n \"Ȧ\": \"Ȧ\",\n \"Ǡ\": \"Ǡ\",\n \"\\xc5\": \"Å\",\n \"Ǻ\": \"Ǻ\",\n \"Ḃ\": \"Ḃ\",\n \"Ć\": \"Ć\",\n \"Ḉ\": \"Ḉ\",\n \"Č\": \"Č\",\n \"Ĉ\": \"Ĉ\",\n \"Ċ\": \"Ċ\",\n \"\\xc7\": \"Ç\",\n \"Ď\": \"Ď\",\n \"Ḋ\": \"Ḋ\",\n \"Ḑ\": \"Ḑ\",\n \"\\xc9\": \"É\",\n \"\\xc8\": \"È\",\n \"\\xcb\": \"Ë\",\n \"Ẽ\": \"Ẽ\",\n \"Ē\": \"Ē\",\n \"Ḗ\": \"Ḗ\",\n \"Ḕ\": \"Ḕ\",\n \"Ĕ\": \"Ĕ\",\n \"Ḝ\": \"Ḝ\",\n \"Ě\": \"Ě\",\n \"\\xca\": \"Ê\",\n \"Ế\": \"Ế\",\n \"Ề\": \"Ề\",\n \"Ễ\": \"Ễ\",\n \"Ė\": \"Ė\",\n \"Ȩ\": \"Ȩ\",\n \"Ḟ\": \"Ḟ\",\n \"Ǵ\": \"Ǵ\",\n \"Ḡ\": \"Ḡ\",\n \"Ğ\": \"Ğ\",\n \"Ǧ\": \"Ǧ\",\n \"Ĝ\": \"Ĝ\",\n \"Ġ\": \"Ġ\",\n \"Ģ\": \"Ģ\",\n \"Ḧ\": \"Ḧ\",\n \"Ȟ\": \"Ȟ\",\n \"Ĥ\": \"Ĥ\",\n \"Ḣ\": \"Ḣ\",\n \"Ḩ\": \"Ḩ\",\n \"\\xcd\": \"Í\",\n \"\\xcc\": \"Ì\",\n \"\\xcf\": \"Ï\",\n \"Ḯ\": \"Ḯ\",\n \"Ĩ\": \"Ĩ\",\n \"Ī\": \"Ī\",\n \"Ĭ\": \"Ĭ\",\n \"Ǐ\": \"Ǐ\",\n \"\\xce\": \"Î\",\n \"İ\": \"İ\",\n \"Ĵ\": \"Ĵ\",\n \"Ḱ\": \"Ḱ\",\n \"Ǩ\": \"Ǩ\",\n \"Ķ\": \"Ķ\",\n \"Ĺ\": \"Ĺ\",\n \"Ľ\": \"Ľ\",\n \"Ļ\": \"Ļ\",\n \"Ḿ\": \"Ḿ\",\n \"Ṁ\": \"Ṁ\",\n \"Ń\": \"Ń\",\n \"Ǹ\": \"Ǹ\",\n \"\\xd1\": \"Ñ\",\n \"Ň\": \"Ň\",\n \"Ṅ\": \"Ṅ\",\n \"Ņ\": \"Ņ\",\n \"\\xd3\": \"Ó\",\n \"\\xd2\": \"Ò\",\n \"\\xd6\": \"Ö\",\n \"Ȫ\": \"Ȫ\",\n \"\\xd5\": \"Õ\",\n \"Ṍ\": \"Ṍ\",\n \"Ṏ\": \"Ṏ\",\n \"Ȭ\": \"Ȭ\",\n \"Ō\": \"Ō\",\n \"Ṓ\": \"Ṓ\",\n \"Ṑ\": \"Ṑ\",\n \"Ŏ\": \"Ŏ\",\n \"Ǒ\": \"Ǒ\",\n \"\\xd4\": \"Ô\",\n \"Ố\": \"Ố\",\n \"Ồ\": \"Ồ\",\n \"Ỗ\": \"Ỗ\",\n \"Ȯ\": \"Ȯ\",\n \"Ȱ\": \"Ȱ\",\n \"Ő\": \"Ő\",\n \"Ṕ\": \"Ṕ\",\n \"Ṗ\": \"Ṗ\",\n \"Ŕ\": \"Ŕ\",\n \"Ř\": \"Ř\",\n \"Ṙ\": \"Ṙ\",\n \"Ŗ\": \"Ŗ\",\n \"Ś\": \"Ś\",\n \"Ṥ\": \"Ṥ\",\n \"Š\": \"Š\",\n \"Ṧ\": \"Ṧ\",\n \"Ŝ\": \"Ŝ\",\n \"Ṡ\": \"Ṡ\",\n \"Ş\": \"Ş\",\n \"Ť\": \"Ť\",\n \"Ṫ\": \"Ṫ\",\n \"Ţ\": \"Ţ\",\n \"\\xda\": \"Ú\",\n \"\\xd9\": \"Ù\",\n \"\\xdc\": \"Ü\",\n \"Ǘ\": \"Ǘ\",\n \"Ǜ\": \"Ǜ\",\n \"Ǖ\": \"Ǖ\",\n \"Ǚ\": \"Ǚ\",\n \"Ũ\": \"Ũ\",\n \"Ṹ\": \"Ṹ\",\n \"Ū\": \"Ū\",\n \"Ṻ\": \"Ṻ\",\n \"Ŭ\": \"Ŭ\",\n \"Ǔ\": \"Ǔ\",\n \"\\xdb\": \"Û\",\n \"Ů\": \"Ů\",\n \"Ű\": \"Ű\",\n \"Ṽ\": \"Ṽ\",\n \"Ẃ\": \"Ẃ\",\n \"Ẁ\": \"Ẁ\",\n \"Ẅ\": \"Ẅ\",\n \"Ŵ\": \"Ŵ\",\n \"Ẇ\": \"Ẇ\",\n \"Ẍ\": \"Ẍ\",\n \"Ẋ\": \"Ẋ\",\n \"\\xdd\": \"Ý\",\n \"Ỳ\": \"Ỳ\",\n \"Ÿ\": \"Ÿ\",\n \"Ỹ\": \"Ỹ\",\n \"Ȳ\": \"Ȳ\",\n \"Ŷ\": \"Ŷ\",\n \"Ẏ\": \"Ẏ\",\n \"Ź\": \"Ź\",\n \"Ž\": \"Ž\",\n \"Ẑ\": \"Ẑ\",\n \"Ż\": \"Ż\",\n \"ά\": \"ά\",\n \"ὰ\": \"ὰ\",\n \"ᾱ\": \"ᾱ\",\n \"ᾰ\": \"ᾰ\",\n \"έ\": \"έ\",\n \"ὲ\": \"ὲ\",\n \"ή\": \"ή\",\n \"ὴ\": \"ὴ\",\n \"ί\": \"ί\",\n \"ὶ\": \"ὶ\",\n \"ϊ\": \"ϊ\",\n \"ΐ\": \"ΐ\",\n \"ῒ\": \"ῒ\",\n \"ῑ\": \"ῑ\",\n \"ῐ\": \"ῐ\",\n \"ό\": \"ό\",\n \"ὸ\": \"ὸ\",\n \"ύ\": \"ύ\",\n \"ὺ\": \"ὺ\",\n \"ϋ\": \"ϋ\",\n \"ΰ\": \"ΰ\",\n \"ῢ\": \"ῢ\",\n \"ῡ\": \"ῡ\",\n \"ῠ\": \"ῠ\",\n \"ώ\": \"ώ\",\n \"ὼ\": \"ὼ\",\n \"Ύ\": \"Ύ\",\n \"Ὺ\": \"Ὺ\",\n \"Ϋ\": \"Ϋ\",\n \"Ῡ\": \"Ῡ\",\n \"Ῠ\": \"Ῠ\",\n \"Ώ\": \"Ώ\",\n \"Ὼ\": \"Ὼ\"\n};\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */ class Parser {\n constructor(input, settings){\n this.mode = void 0;\n this.gullet = void 0;\n this.settings = void 0;\n this.leftrightDepth = void 0;\n this.nextToken = void 0;\n // Start in math mode\n this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n this.settings = settings; // Count leftright depth (for \\middle errors)\n this.leftrightDepth = 0;\n }\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */ expect(text, consume) {\n if (consume === void 0) {\n consume = true;\n }\n if (this.fetch().text !== text) {\n throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n }\n if (consume) {\n this.consume();\n }\n }\n /**\n * Discards the current lookahead token, considering it consumed.\n */ consume() {\n this.nextToken = null;\n }\n /**\n * Return the current lookahead token, or if there isn't one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */ fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n return this.nextToken;\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */ switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n /**\n * Main parsing function, which parses an entire input.\n */ parse() {\n if (!this.settings.globalGroup) {\n // Create a group namespace for the math expression.\n // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n this.gullet.beginGroup();\n } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn't\n // pollute settings.macros.\n if (this.settings.colorIsTextColor) {\n this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n }\n try {\n // Try to parse the input\n var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n this.expect(\"EOF\"); // End the group namespace for the expression\n if (!this.settings.globalGroup) {\n this.gullet.endGroup();\n }\n return parse; // Close any leftover groups in case of a parse error.\n } finally{\n this.gullet.endGroups();\n }\n }\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */ subparse(tokens) {\n // Save the next token from the current job.\n var oldToken = this.nextToken;\n this.consume(); // Run the new job, terminating it with an excess '}'\n this.gullet.pushToken(new Token(\"}\"));\n this.gullet.pushTokens(tokens);\n var parse = this.parseExpression(false);\n this.expect(\"}\"); // Restore the next token from the current job.\n this.nextToken = oldToken;\n return parse;\n }\n /**\n * Parses an \"expression\", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n */ parseExpression(breakOnInfix, breakOnTokenText) {\n var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n // we reached the end, a }, or a \\right)\n while(true){\n // Ignore spaces in math mode\n if (this.mode === \"math\") {\n this.consumeSpaces();\n }\n var lex = this.fetch();\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n break;\n }\n var atom = this.parseAtom(breakOnTokenText);\n if (!atom) {\n break;\n } else if (atom.type === \"internal\") {\n continue;\n }\n body.push(atom);\n }\n if (this.mode === \"text\") {\n this.formLigatures(body);\n }\n return this.handleInfixNodes(body);\n }\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there's more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */ handleInfixNodes(body) {\n var overIndex = -1;\n var funcName;\n for(var i = 0; i < body.length; i++){\n if (body[i].type === \"infix\") {\n if (overIndex !== -1) {\n throw new ParseError(\"only one infix operator per group\", body[i].token);\n }\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n if (overIndex !== -1 && funcName) {\n var numerNode;\n var denomNode;\n var numerBody = body.slice(0, overIndex);\n var denomBody = body.slice(overIndex + 1);\n if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n numerNode = numerBody[0];\n } else {\n numerNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: numerBody\n };\n }\n if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n denomNode = denomBody[0];\n } else {\n denomNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: denomBody\n };\n }\n var node;\n if (funcName === \"\\\\\\\\abovefrac\") {\n node = this.callFunction(funcName, [\n numerNode,\n body[overIndex],\n denomNode\n ], []);\n } else {\n node = this.callFunction(funcName, [\n numerNode,\n denomNode\n ], []);\n }\n return [\n node\n ];\n } else {\n return body;\n }\n }\n /**\n * Handle a subscript or superscript with nice errors.\n */ handleSupSubscript(name // For error reporting.\n ) {\n var symbolToken = this.fetch();\n var symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n var group = this.parseGroup(name);\n if (!group) {\n throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n }\n return group;\n }\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */ formatUnsupportedCmd(text) {\n var textordArray = [];\n for(var i = 0; i < text.length; i++){\n textordArray.push({\n type: \"textord\",\n mode: \"text\",\n text: text[i]\n });\n }\n var textNode = {\n type: \"text\",\n mode: this.mode,\n body: textordArray\n };\n var colorNode = {\n type: \"color\",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [\n textNode\n ]\n };\n return colorNode;\n }\n /**\n * Parses a group with optional super/subscripts.\n */ parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n var base = this.parseGroup(\"atom\", breakOnTokenText); // In text mode, we don't have superscripts or subscripts\n if (this.mode === \"text\") {\n return base;\n } // Note that base may be empty (i.e. null) at this point.\n var superscript;\n var subscript;\n while(true){\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces(); // Lex the first token\n var lex = this.fetch();\n if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n // We got a limit control\n if (base && base.type === \"op\") {\n var limits = lex.text === \"\\\\limits\";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === \"operatorname\") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === \"\\\\limits\";\n }\n } else {\n throw new ParseError(\"Limit controls must follow a math operator\", lex);\n }\n this.consume();\n } else if (lex.text === \"^\") {\n // We got a superscript start\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n superscript = this.handleSupSubscript(\"superscript\");\n } else if (lex.text === \"_\") {\n // We got a subscript start\n if (subscript) {\n throw new ParseError(\"Double subscript\", lex);\n }\n subscript = this.handleSupSubscript(\"subscript\");\n } else if (lex.text === \"'\") {\n // We got a prime\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n var prime = {\n type: \"textord\",\n mode: this.mode,\n text: \"\\\\prime\"\n }; // Many primes can be grouped together, so we handle this here\n var primes = [\n prime\n ];\n this.consume(); // Keep lexing tokens until we get something that's not a prime\n while(this.fetch().text === \"'\"){\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n } // If there's a superscript following the primes, combine that\n // superscript in with the primes.\n if (this.fetch().text === \"^\") {\n primes.push(this.handleSupSubscript(\"superscript\"));\n } // Put everything into an ordgroup as the superscript\n superscript = {\n type: \"ordgroup\",\n mode: this.mode,\n body: primes\n };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n var str = uSubsAndSups[lex.text];\n var isSub = unicodeSubRegEx.test(lex.text);\n this.consume(); // Continue fetching tokens to fill out the string.\n while(true){\n var token = this.fetch().text;\n if (!uSubsAndSups[token]) {\n break;\n }\n if (unicodeSubRegEx.test(token) !== isSub) {\n break;\n }\n this.consume();\n str += uSubsAndSups[token];\n } // Now create a (sub|super)script.\n var body = new Parser(str, this.settings).parse();\n if (isSub) {\n subscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n } else {\n superscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n }\n } else {\n break;\n }\n } // Base must be set if superscript or subscript are set per logic above,\n // but need to check here for type check to pass.\n if (superscript || subscript) {\n // If we got either a superscript or subscript, create a supsub\n return {\n type: \"supsub\",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript\n };\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n /**\n * Parses an entire function, including its base and all of its arguments.\n */ parseFunction(breakOnTokenText, name // For determining its context\n ) {\n var token = this.fetch();\n var func = token.text;\n var funcData = functions[func];\n if (!funcData) {\n return null;\n }\n this.consume(); // consume command token\n if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n } else if (this.mode === \"text\" && !funcData.allowedInText) {\n throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n }\n var { args, optArgs } = this.parseArguments(func, funcData);\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n /**\n * Call a function handler with a suitable context and arguments.\n */ callFunction(name, args, optArgs, token, breakOnTokenText) {\n var context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n var func = functions[name];\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new ParseError(\"No function handler for \" + name);\n }\n }\n /**\n * Parses the arguments of a function or environment\n */ parseArguments(func, funcData) {\n var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n if (totalArgs === 0) {\n return {\n args: [],\n optArgs: []\n };\n }\n var args = [];\n var optArgs = [];\n for(var i = 0; i < totalArgs; i++){\n var argType = funcData.argTypes && funcData.argTypes[i];\n var isOptional = i < funcData.numOptionalArgs;\n if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n argType = \"primitive\";\n }\n var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new ParseError(\"Null argument, please report this as a bug\");\n }\n }\n return {\n args,\n optArgs\n };\n }\n /**\n * Parses a group when the mode is changing.\n */ parseGroupOfType(name, type, optional) {\n switch(type){\n case \"color\":\n return this.parseColorGroup(optional);\n case \"size\":\n return this.parseSizeGroup(optional);\n case \"url\":\n return this.parseUrlGroup(optional);\n case \"math\":\n case \"text\":\n return this.parseArgumentGroup(optional, type);\n case \"hbox\":\n {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n var group = this.parseArgumentGroup(optional, \"text\");\n return group != null ? {\n type: \"styling\",\n mode: group.mode,\n body: [\n group\n ],\n style: \"text\" // simulate \\textstyle\n } : null;\n }\n case \"raw\":\n {\n var token = this.parseStringGroup(\"raw\", optional);\n return token != null ? {\n type: \"raw\",\n mode: \"text\",\n string: token.text\n } : null;\n }\n case \"primitive\":\n {\n if (optional) {\n throw new ParseError(\"A primitive argument cannot be optional\");\n }\n var _group = this.parseGroup(name);\n if (_group == null) {\n throw new ParseError(\"Expected group as \" + name, this.fetch());\n }\n return _group;\n }\n case \"original\":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n default:\n throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n }\n }\n /**\n * Discard any space tokens, fetching the next non-space token.\n */ consumeSpaces() {\n while(this.fetch().text === \" \"){\n this.consume();\n }\n }\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */ parseStringGroup(modeName, optional) {\n var argToken = this.gullet.scanArgument(optional);\n if (argToken == null) {\n return null;\n }\n var str = \"\";\n var nextToken;\n while((nextToken = this.fetch()).text !== \"EOF\"){\n str += nextToken.text;\n this.consume();\n }\n this.consume(); // consume the end of the argument\n argToken.text = str;\n return argToken;\n }\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */ parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n ) {\n var firstToken = this.fetch();\n var lastToken = firstToken;\n var str = \"\";\n var nextToken;\n while((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)){\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n if (str === \"\") {\n throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n }\n return firstToken.range(lastToken, str);\n }\n /**\n * Parses a color description.\n */ parseColorGroup(optional) {\n var res = this.parseStringGroup(\"color\", optional);\n if (res == null) {\n return null;\n }\n var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n if (!match) {\n throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n }\n var color = match[0];\n if (/^[0-9a-f]{6}$/i.test(color)) {\n // We allow a 6-digit HTML color spec without a leading \"#\".\n // This follows the xcolor package's HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n color = \"#\" + color;\n }\n return {\n type: \"color-token\",\n mode: this.mode,\n color\n };\n }\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */ parseSizeGroup(optional) {\n var res;\n var isBlank = false; // don't expand before parseStringGroup\n this.gullet.consumeSpaces();\n if (!optional && this.gullet.future().text !== \"{\") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n } else {\n res = this.parseStringGroup(\"size\", optional);\n }\n if (!res) {\n return null;\n }\n if (!optional && res.text.length === 0) {\n // Because we've tested for what is !optional, this block won't\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = \"0pt\"; // Enable \\above{}\n isBlank = true; // This is here specifically for \\genfrac\n }\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n }\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n }\n return {\n type: \"size\",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */ parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode(\"%\", 13); // active character\n this.gullet.lexer.setCatcode(\"~\", 12); // other character\n var res = this.parseStringGroup(\"url\", optional);\n this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n this.gullet.lexer.setCatcode(\"~\", 13); // active character\n if (res == null) {\n return null;\n } // hyperref package allows backslashes alone in href, but doesn't\n // generate valid links in such cases; we interpret this as\n // \"undefined\" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n var url = res.text.replace(/\\\\([#$%&~_^{}])/g, \"$1\");\n return {\n type: \"url\",\n mode: this.mode,\n url\n };\n }\n /**\n * Parses an argument with the mode specified.\n */ parseArgumentGroup(optional, mode) {\n var argToken = this.gullet.scanArgument(optional);\n if (argToken == null) {\n return null;\n }\n var outerMode = this.mode;\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n this.gullet.beginGroup();\n var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n this.expect(\"EOF\"); // expect the end of the argument\n this.gullet.endGroup();\n var result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n return result;\n }\n /**\n * Parses an ordinary group, which is either a single nucleus (like \"x\")\n * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */ parseGroup(name, breakOnTokenText) {\n var firstToken = this.fetch();\n var text = firstToken.text;\n var result; // Try to parse an open brace or \\begingroup\n if (text === \"{\" || text === \"\\\\begingroup\") {\n this.consume();\n var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n this.gullet.beginGroup(); // If we get a brace, parse an expression\n var expression = this.parseExpression(false, groupEnd);\n var lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n this.gullet.endGroup();\n result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn't affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/when-should-one-\n // use-begingroup-instead-of-bgroup\n semisimple: text === \"\\\\begingroup\" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n if (this.settings.throwOnError) {\n throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n }\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n return result;\n }\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */ formLigatures(group) {\n var n = group.length - 1;\n for(var i = 0; i < n; ++i){\n var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n var v = a.text;\n if (v === \"-\" && group[i + 1].text === \"-\") {\n if (i + 1 < n && group[i + 2].text === \"-\") {\n group.splice(i, 3, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 2]),\n text: \"---\"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: \"--\"\n });\n n -= 1;\n }\n }\n if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */ parseSymbol() {\n var nucleus = this.fetch();\n var text = nucleus.text;\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n var arg = text.slice(5);\n var star = arg.charAt(0) === \"*\";\n if (star) {\n arg = arg.slice(1);\n } // Lexer's tokenRegex is constructed to always have matching\n // first/last characters.\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new ParseError(\"\\\\verb assertion failed --\\n please report what input caused this bug\");\n }\n arg = arg.slice(1, -1); // remove first and last char\n return {\n type: \"verb\",\n mode: \"text\",\n body: arg,\n star\n };\n } // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Accented Unicode text character \"' + text[0] + '\" used in ' + \"math mode\", nucleus);\n }\n text = unicodeSymbols[text[0]] + text.slice(1);\n } // Strip off any combining characters\n var match = combiningDiacriticalMarksEndRegex.exec(text);\n if (match) {\n text = text.substring(0, match.index);\n if (text === \"i\") {\n text = \"ı\"; // dotless i, in math and text mode\n } else if (text === \"j\") {\n text = \"ȷ\"; // dotless j, in math and text mode\n }\n } // Recognize base symbol\n var symbol;\n if (symbols[this.mode][text]) {\n if (this.settings.strict && this.mode === \"math\" && extraLatin.indexOf(text) >= 0) {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Latin-1/Unicode text character \"' + text[0] + '\" used in ' + \"math mode\", nucleus);\n }\n var group = symbols[this.mode][text].group;\n var loc = SourceLocation.range(nucleus);\n var s;\n if (ATOMS.hasOwnProperty(group)) {\n // $FlowFixMe\n var family = group;\n s = {\n type: \"atom\",\n mode: this.mode,\n family,\n loc,\n text\n };\n } else {\n // $FlowFixMe\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n } // $FlowFixMe\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80) {\n // no symbol for e.g. ^\n if (this.settings.strict) {\n if (!supportedCodepoint(text.charCodeAt(0))) {\n this.settings.reportNonstrict(\"unknownSymbol\", 'Unrecognized Unicode character \"' + text[0] + '\"' + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n } else if (this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", 'Unicode text character \"' + text[0] + '\" used in math mode', nucleus);\n }\n } // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that's what it\n // takes to render them in LaTeX. Setting `mode: this.mode` is\n // another natural choice (the user requested math mode), but\n // this makes it more difficult for getCharacterMetrics() to\n // distinguish Unicode characters without metrics and those for\n // which we want to simulate the letter M.\n symbol = {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n this.consume(); // Transform combining characters into accents\n if (match) {\n for(var i = 0; i < match[0].length; i++){\n var accent = match[0][i];\n if (!unicodeAccents[accent]) {\n throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n }\n var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n if (!command) {\n throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n }\n symbol = {\n type: \"accent\",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n isShifty: true,\n // $FlowFixMe\n base: symbol\n };\n }\n } // $FlowFixMe\n return symbol;\n }\n}\nParser.endOfExpression = [\n \"}\",\n \"\\\\endgroup\",\n \"\\\\end\",\n \"\\\\right\",\n \"&\"\n];\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */ /**\n * Parses an expression using a Parser, then returns the parsed result.\n */ var parseTree = function parseTree(toParse, settings) {\n if (!(typeof toParse === \"string\" || toParse instanceof String)) {\n throw new TypeError(\"KaTeX can only parse string typed expression\");\n }\n var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n delete parser.gullet.macros.current[\"\\\\current@color\"];\n delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n if (!settings.displayMode) {\n throw new ParseError(\"\\\\tag works only in display equations\");\n }\n tree = [\n {\n type: \"tag\",\n mode: \"text\",\n body: tree,\n tag: parser.subparse([\n new Token(\"\\\\df@tag\")\n ])\n }\n ];\n }\n return tree;\n};\n/* eslint no-console:0 */ /**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */ var render = function render(expression, baseNode, options) {\n baseNode.textContent = \"\";\n var node = renderToDomTree(expression, options).toNode();\n baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\nif (typeof document !== \"undefined\") {\n if (document.compatMode !== \"CSS1Compat\") {\n typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n render = function render() {\n throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n };\n }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */ var renderToString = function renderToString(expression, options) {\n var markup = renderToDomTree(expression, options).toMarkup();\n return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */ var generateParseTree = function generateParseTree(expression, options) {\n var settings = new Settings(options);\n return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message. Otherwise, simply throws the error.\n */ var renderError = function renderError(error, expression, options) {\n if (options.throwOnError || !(error instanceof ParseError)) {\n throw error;\n }\n var node = buildCommon.makeSpan([\n \"katex-error\"\n ], [\n new SymbolNode(expression)\n ]);\n node.setAttribute(\"title\", error.toString());\n node.setAttribute(\"style\", \"color:\" + options.errorColor);\n return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */ var renderToDomTree = function renderToDomTree(expression, options) {\n var settings = new Settings(options);\n try {\n var tree = parseTree(expression, settings);\n return buildTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */ var renderToHTMLTree = function renderToHTMLTree(expression, options) {\n var settings = new Settings(options);\n try {\n var tree = parseTree(expression, settings);\n return buildHTMLTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\nvar katex = {\n /**\n * Current KaTeX version\n */ version: \"0.16.8\",\n /**\n * Renders the given LaTeX into an HTML+MathML combination, and adds\n * it as a child to the specified DOM node.\n */ render,\n /**\n * Renders the given LaTeX into an HTML+MathML combination string,\n * for sending to the client.\n */ renderToString,\n /**\n * KaTeX error, usually during parsing.\n */ ParseError,\n /**\n * The shema of Settings\n */ SETTINGS_SCHEMA,\n /**\n * Parses the given LaTeX into KaTeX's internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */ __parse: generateParseTree,\n /**\n * Renders the given LaTeX into an HTML+MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */ __renderToDomTree: renderToDomTree,\n /**\n * Renders the given LaTeX into an HTML internal DOM tree representation,\n * without MathML and without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */ __renderToHTMLTree: renderToHTMLTree,\n /**\n * extends internal font metrics object with a new object\n * each key in the new object represents a font name\n */ __setFontMetrics: setFontMetrics,\n /**\n * adds a new symbol to builtin symbols table\n */ __defineSymbol: defineSymbol,\n /**\n * adds a new function to builtin function list,\n * which directly produce parse tree elements\n * and have their own html/mathml builders\n */ __defineFunction: defineFunction,\n /**\n * adds a new macro to builtin macro list\n */ __defineMacro: defineMacro,\n /**\n * Expose the dom tree node types, which can be useful for type checking nodes.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */ __domTree: {\n Span,\n Anchor,\n SymbolNode,\n SvgNode,\n PathNode,\n LineNode\n }\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMva2F0ZXgvZGlzdC9rYXRleC5tanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7Q0FHQyxHQUNELE1BQU1BO0lBQ0osNERBQTREO0lBQzVELGtDQUFrQztJQUNsQyxzQ0FBc0M7SUFDdEMsb0NBQW9DO0lBQ3BDQyxZQUFZQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsR0FBRyxDQUFFO1FBQzdCLElBQUksQ0FBQ0YsS0FBSyxHQUFHLEtBQUs7UUFDbEIsSUFBSSxDQUFDQyxLQUFLLEdBQUcsS0FBSztRQUNsQixJQUFJLENBQUNDLEdBQUcsR0FBRyxLQUFLO1FBQ2hCLElBQUksQ0FBQ0YsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsR0FBRyxHQUFHQTtJQUNiO0lBQ0E7Ozs7Ozs7R0FPQyxHQUdELE9BQU9DLE1BQU1DLEtBQUssRUFBRUMsTUFBTSxFQUFFO1FBQzFCLElBQUksQ0FBQ0EsUUFBUTtZQUNYLE9BQU9ELFNBQVNBLE1BQU1FLEdBQUc7UUFDM0IsT0FBTyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0EsTUFBTUUsR0FBRyxJQUFJLENBQUNELE9BQU9DLEdBQUcsSUFBSUYsTUFBTUUsR0FBRyxDQUFDTixLQUFLLEtBQUtLLE9BQU9DLEdBQUcsQ0FBQ04sS0FBSyxFQUFFO1lBQ3RGLE9BQU87UUFDVCxPQUFPO1lBQ0wsT0FBTyxJQUFJRixlQUFlTSxNQUFNRSxHQUFHLENBQUNOLEtBQUssRUFBRUksTUFBTUUsR0FBRyxDQUFDTCxLQUFLLEVBQUVJLE9BQU9DLEdBQUcsQ0FBQ0osR0FBRztRQUM1RTtJQUNGO0FBRUY7QUFFQTs7O0NBR0MsR0FFRDs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxNQUFNSztJQUNKLHlCQUF5QjtJQUN6QixvQkFBb0I7SUFDcEJSLFlBQVlTLElBQUksRUFDaEJGLEdBQUcsQ0FBRTtRQUNILElBQUksQ0FBQ0UsSUFBSSxHQUFHLEtBQUs7UUFDakIsSUFBSSxDQUFD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QUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFPO1lBQU87WUFBRztTQUFLO1FBQ2pDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBSztZQUFHO1lBQUc7U0FBUTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQUs7WUFBRztZQUFHO1NBQVE7UUFDOUIsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUMvQixRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFRO1lBQU87WUFBRztZQUFHO1NBQUk7UUFDbEMsUUFBUTtZQUFDO1lBQVE7WUFBTztZQUFHO1lBQUc7U0FBSTtRQUNsQyxRQUFRO1lBQUM7WUFBUTtZQUFPO1lBQUc7WUFBRztTQUFJO1FBQ2xDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVE7WUFBTztZQUFHO1lBQUc7U0FBSTtRQUNsQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxRQUFRO1lBQUMsQ0FBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBSTtRQUM3QixRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUTtZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFRO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBUTtRQUNqQyxRQUFRO1lBQUM7WUFBRztZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ2pDLFFBQVE7WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBUTtRQUNqQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQVE7UUFDdkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUMvQixRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFPO1lBQUc7WUFBRztTQUFRO1FBQ2pDLFFBQVE7WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQVE7UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDcEMsU0FBUztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQzVDO0lBQ0EsdUJBQXVCO1FBQ3JCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFRO1lBQVM7U0FBUTtRQUNsRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNuRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQU87UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQVM7U0FBUTtRQUMzQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQU87UUFDNUMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNuRCxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7SUFDM0I7SUFDQSxtQkFBbUI7UUFDakIsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTztRQUN2QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lB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O1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7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O1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN2QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBTTtRQUNqQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFNO1FBQ2pDLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDakMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3hDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN4QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQU07UUFDakMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQy9DLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN4QyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDaEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFNBQVM7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsU0FBUztZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ2hDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFFO0lBQ3RDO0lBQ0EsbUJBQW1CO1FBQ2pCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUMxQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN0QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDMUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFRO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDMUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUM3QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQU87WUFBRztTQUFRO1FBQzVDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFRO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBTztZQUFHO1NBQVE7UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUM1QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtJQUMzQztJQUNBLGVBQWU7UUFDYixNQUFNO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3hCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDMUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3BDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUM1QyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzFDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFLO1FBQ3BDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNyQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDM0MsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3ZDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSztRQUNyQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSztRQUMzQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDckMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBTTtZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzNDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDekIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDeEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQ3JDO0lBQ0EsZ0JBQWdCO1FBQ2QsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQ2hDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzFCLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxNQUFNO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFLO1FBQ3BDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQU87WUFBRztTQUFLO1FBQ2xDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBTTtZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDMUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBTTtZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ2pDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDekIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFHO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDcEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUMvQixRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBTztZQUFHO1lBQUc7U0FBTTtRQUMvQixRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2pDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUMvQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDckMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNyQyxRQUFRO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFJO1FBQ2pDLFFBQVE7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbkMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBSTtRQUNqQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQU87UUFDOUMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQ2xDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQVE7WUFBUTtZQUFHO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFJO1FBQy9CLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQUs7WUFBSztZQUFHO1lBQUc7U0FBUTtRQUNqQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDL0IsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQy9DLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFJO1FBQ25DLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQUk7UUFDbkMsUUFBUTtZQUFDO1lBQVE7WUFBUTtZQUFHO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBUTtZQUFRO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLFFBQVE7WUFBQztZQUFRO1lBQVE7WUFBRztZQUFHO1NBQVE7UUFDdkMsUUFBUTtZQUFDO1lBQVE7WUFBUTtZQUFHO1lBQUc7U0FBUTtRQUN2QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFPO1lBQU07WUFBRztZQUFHO1NBQU07UUFDbEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBSTtRQUNqQyxRQUFRO1lBQUM7WUFBTTtZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ2xDLFFBQVE7WUFBQyxDQUFDO1lBQU07WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFLO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbEMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDdEMsUUFBUTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3RDLFFBQVE7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbkMsUUFBUTtZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNuQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ3JDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsUUFBUTtZQUFDO1lBQUc7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNoQyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3pDLFFBQVE7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDekMsU0FBUztZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFPO1lBQU87WUFBRztZQUFHO1NBQU07UUFDcEMsU0FBUztZQUFDO1lBQU87WUFBTztZQUFHO1lBQUc7U0FBTTtRQUNwQyxTQUFTO1lBQUM7WUFBTztZQUFPO1lBQUc7WUFBRztTQUFNO1FBQ3BDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDakMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUMxQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQzFDLFNBQVM7WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUU7SUFDdEM7SUFDQSxtQkFBbUI7UUFDakIsTUFBTTtZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN4QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTztRQUNqQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQUc7U0FBUTtRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ2pDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN2QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUMxQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFPO1FBQ3hDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsU0FBUztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNwQyxTQUFTO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQzVDO0lBQ0EsZUFBZTtRQUNiLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFLO1FBQ3BDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQU87UUFDNUMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQzVDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM3QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDdkMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDcEQsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFPO1FBQ3ZDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDekIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFNO1lBQVM7U0FBUTtRQUMzQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQzdDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFTO1NBQU87UUFDNUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUNwRCxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFPO1FBQ25ELE9BQU87WUFBQztZQUFTO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDcEQsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQVM7U0FBTztRQUNuRCxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFRO1lBQVM7U0FBUTtRQUM3QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDOUMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBUztTQUFRO1FBQ3BELE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBUztTQUFRO1FBQzlDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsUUFBUTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtRQUMvQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBUztTQUFPO1FBQ3hDLFNBQVM7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFTO1NBQVE7UUFDMUMsU0FBUztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQVM7U0FBUTtJQUNsRDtJQUNBLGtCQUFrQjtRQUNoQixNQUFNO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3hCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQUs7UUFDakMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUs7UUFDM0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUM5QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQzlCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDOUIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7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QUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUMvQixPQUFPO1lBQUM7WUFBUztZQUFHO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSztRQUMvQixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFLO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUs7UUFDL0IsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUs7UUFDdEMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN6QyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ25DLFFBQVE7WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbkMsUUFBUTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNuQyxRQUFRO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO0lBQ3JDO0lBQ0Esb0JBQW9CO1FBQ2xCLE1BQU07WUFBQztZQUFHO1lBQUc7WUFBRztZQUFHO1NBQUs7UUFDeEIsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDN0MsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFTO1lBQUc7U0FBSTtRQUN0QyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzFDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBTTtZQUFTO1lBQUc7U0FBSTtRQUNoQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQzdDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDckMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFJO1FBQ25DLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDbkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUNuQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsTUFBTTtZQUFDLENBQUM7WUFBTTtZQUFNO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFPO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDM0MsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBTztRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVE7WUFBRztTQUFRO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUTtZQUFHO1NBQVE7UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDdkMsTUFBTTtZQUFDO1lBQU07WUFBTTtZ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akMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDaEMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDMUIsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTTtZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM3QixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDN0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQyxDQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNsQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBTztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU87UUFDaEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN2QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3ZDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFPO1lBQUc7U0FBUTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFNO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDakMsTUFBTTtZQUFDO1lBQU07WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzdCLE1BQU07WUFBQztZQUFNO1lBQVM7WUFBUztZQUFHO1NBQUk7UUFDdEMsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNqQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2pDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBSTtRQUMxQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBUztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUN4QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQVM7WUFBRztTQUFRO1FBQ3hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFTO1lBQUc7U0FBUTtRQUM5QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFNO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDakMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBSztRQUN6QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDeEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFJO1FBQzlCLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQUk7UUFDOUIsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBSTtRQUM5QixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQVE7UUFDbEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBUTtRQUNsQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFRO1FBQ2xDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFB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WUFBRztTQUFRO1FBQ3BDLE1BQU07WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDcEMsTUFBTTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNwQyxNQUFNO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3BDLE9BQU87WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDckMsT0FBTztZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUNyQyxPQUFPO1lBQUM7WUFBRztZQUFHO1lBQUc7WUFBRztTQUFLO1FBQ3pCLE9BQU87WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDM0IsT0FBTztZQUFDO1lBQUc7WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUMzQixPQUFPO1lBQUM7WUFBRztZQUFNO1lBQUc7WUFBRztTQUFJO1FBQzNCLE9BQU87WUFBQztZQUFHO1lBQU07WUFBRztZQUFHO1NBQUk7UUFDM0IsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBSTtRQUNsQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzVDLFFBQVE7WUFBQztZQUFPO1lBQU07WUFBUztZQUFHO1NBQVE7UUFDMUMsUUFBUTtZQUFDO1lBQU87WUFBTTtZQUFTO1lBQUc7U0FBUTtRQUMxQyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQVM7WUFBRztTQUFRO1FBQzVDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFBRztZQUFHO1NBQVE7UUFDdEMsUUFBUTtZQUFDO1lBQVM7WUFBTTtZQUFHO1lBQUc7U0FBUTtRQUN0QyxRQUFRO1lBQUM7WUFBUztZQUFNO1lBQUc7WUFBRztTQUFRO1FBQ3RDLFFBQVE7WUFBQztZQUFTO1lBQU07WUFB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WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQztZQUFTO1lBQU87WUFBRztZQUFHO1NBQU07UUFDbkMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQztZQUFHO1lBQU87WUFBRztZQUFHO1NBQU07UUFDN0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUMsQ0FBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsTUFBTTtZQUFDLENBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE1BQU07WUFBQyxDQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDckMsTUFBTTtZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNyQyxNQUFNO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3JDLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQVM7WUFBRztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE1BQU07WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDL0IsTUFBTTtZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUMvQixNQUFNO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQy9CLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFTO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDdEMsT0FBTztZQUFDO1lBQVM7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUN0QyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBRztZQUFHO1lBQUc7U0FBTTtRQUMxQixPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFTO1lBQUc7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBUztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ3RDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztTQUFNO1FBQ2hDLE9BQU87WUFBQztZQUFHO1lBQVM7WUFBRztZQUFHO1NBQU07UUFDaEMsT0FBTztZQUFDO1lBQUc7WUFBUztZQUFHO1lBQUc7U0FBTTtRQUNoQyxPQUFPO1lBQUM7WUFBRztZQUFTO1lBQUc7WUFBRztT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U0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFLO0FBQ3ZDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQUs7QUFDdkNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBSztBQUN2Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxRQUFVLFNBQVM7QUFDckRmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsUUFBVTtBQUM1Q2YsYUFBYUUsTUFBTUMsTUFBTVksU0FBUyxLQUFVO0FBQzVDZixhQUFhRSxNQUFNQyxNQUFNWSxTQUFTLEtBQVU7QUFDNUNmLGFBQWFFLE1BQU1DLE1BQU1ZLFNBQVMsS0FBVTtBQUM1Q2YsYUFBYUUsTUFBTUUsS0FBS1csU0FBUyxLQUFVO0FBQzNDZixhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsV0FBVztBQUN2RFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLFVBQVU7QUFDdERULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxXQUFXO0FBQ3ZEVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsV0FBVztBQUN2RFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLGFBQWE7QUFDekRULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxVQUFVO0FBQ3REVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUsU0FBUztBQUNyRFQsYUFBYUUsTUFBTUMsTUFBTU0sU0FBUyxLQUFVLFdBQVc7QUFDdkRULGFBQWFFLE1BQU1DLE1BQU1NLFNBQVMsS0FBVSxVQUFVO0FBQ3REVCxhQUFhRSxNQUFNQyxNQUFNTSxTQUFTLEtBQVUs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S0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtJQUNWLEtBQVU7SUFDVixLQUFVO0lBQ1YsS0FBVTtBQUNaO0FBRUEsa0NBQWtDLEdBRWxDLElBQUlDLGlCQUFpQjtJQUNuQixLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO1FBQ1IsUUFBUTtJQUNWO0lBQ0EsS0FBSztRQUNILFFBQVE7UUFDUixRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtRQUNSLFFBQVE7SUFDVjtJQUNBLEtBQUs7UUFDSCxRQUFRO0lBQ1Y7SUFDQSxLQUFLO1FBQ0gsUUFBUTtJQUNWO0FBQ0Y7QUFDQSxJQUFJQyxpQkFBaUI7SUFDbkIsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLFFBQUs7SUFDTCxRQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLFFBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsUUFBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFDUDtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEJDLEdBQ0QsTUFBTUM7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QnJoQztJQUVsQjs7R0FFQyxHQUNEc2hDLGdCQUFnQmw3QjtJQUVoQjs7OztHQUlDLEdBQ0RtN0Isa0JBQWtCeHlCO0lBRWxCOztHQUVDLEdBQ0R5eUIsZUFBZTFZO0lBRWY7Ozs7OztHQU1DLEdBQ0QyWSxXQUFXO1FBQ1RsOUI7UUFDQUc7UUFDQU07UUFDQU87UUFDQUk7UUFDQUc7SUFDRjtBQUNGO0FBRTRCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMva2F0ZXgvZGlzdC9rYXRleC5tanM/Nzk2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExleGluZyBvciBwYXJzaW5nIHBvc2l0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlcG9ydGluZy5cbiAqIFRoaXMgb2JqZWN0IGlzIGltbXV0YWJsZS5cbiAqL1xuY2xhc3MgU291cmNlTG9jYXRpb24ge1xuICAvLyBUaGUgKyBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlc2UgZmllbGRzIGFyZW4ndCB3cml0ZWFibGVcbiAgLy8gTGV4ZXIgaG9sZGluZyB0aGUgaW5wdXQgc3RyaW5nLlxuICAvLyBTdGFydCBvZmZzZXQsIHplcm8tYmFzZWQgaW5jbHVzaXZlLlxuICAvLyBFbmQgb2Zmc2V0LCB6ZXJvLWJhc2VkIGV4Y2x1c2l2ZS5cbiAgY29uc3RydWN0b3IobGV4ZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmxleGVyID0gdm9pZCAwO1xuICAgIHRoaXMuc3RhcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5lbmQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuICAvKipcbiAgICogTWVyZ2VzIHR3byBgU291cmNlTG9jYXRpb25gcyBmcm9tIGxvY2F0aW9uIHByb3ZpZGVycywgZ2l2ZW4gdGhleSBhcmVcbiAgICogcHJvdmlkZWQgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS5cbiAgICogLSBSZXR1cm5zIHRoZSBmaXJzdCBvbmUncyBsb2NhdGlvbiBpZiBvbmx5IHRoZSBmaXJzdCBpcyBwcm92aWRlZC5cbiAgICogLSBSZXR1cm5zIGEgbWVyZ2VkIHJhbmdlIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICogICBhbmQgdGhlaXIgbGV4ZXJzIG1hdGNoLlxuICAgKiAtIE90aGVyd2lzZSwgcmV0dXJucyBudWxsLlxuICAgKi9cblxuXG4gIHN0YXRpYyByYW5nZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKCFzZWNvbmQpIHtcbiAgICAgIHJldHVybiBmaXJzdCAmJiBmaXJzdC5sb2M7XG4gICAgfSBlbHNlIGlmICghZmlyc3QgfHwgIWZpcnN0LmxvYyB8fCAhc2Vjb25kLmxvYyB8fCBmaXJzdC5sb2MubGV4ZXIgIT09IHNlY29uZC5sb2MubGV4ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFNvdXJjZUxvY2F0aW9uKGZpcnN0LmxvYy5sZXhlciwgZmlyc3QubG9jLnN0YXJ0LCBzZWNvbmQubG9jLmVuZCk7XG4gICAgfVxuICB9XG5cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVxdWlyZWQgdG8gYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFRva2VuLCBMZXhlciwgYW5kXG4gKiBQYXJzZUVycm9yLlxuICovXG5cbi8qKlxuICogVGhlIHJlc3VsdGluZyB0b2tlbiByZXR1cm5lZCBmcm9tIGBsZXhgLlxuICpcbiAqIEl0IGNvbnNpc3RzIG9mIHRoZSB0b2tlbiB0ZXh0IHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqIFRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWxseSBhIHJhbmdlIGluIGFuIGlucHV0IHN0cmluZyxcbiAqIGJ1dCBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIHRoZSBiYXJlIGlucHV0IHN0cmluZywgd2UgcmVmZXIgdG8gdGhlIGxleGVyLlxuICogVGhhdCB3YXkgaXQgaXMgcG9zc2libGUgdG8gYXR0YWNoIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBpbnB1dCBzdHJpbmcsXG4gKiBsaWtlIGZvciBleGFtcGxlIGEgZmlsZSBuYW1lIG9yIHNpbWlsYXIuXG4gKlxuICogVGhlIHBvc2l0aW9uIGluZm9ybWF0aW9uIGlzIG9wdGlvbmFsLCBzbyBpdCBpcyBPSyB0byBjb25zdHJ1Y3Qgc3ludGhldGljXG4gKiB0b2tlbnMgaWYgYXBwcm9wcmlhdGUuIE5vdCBwcm92aWRpbmcgYXZhaWxhYmxlIHBvc2l0aW9uIGluZm9ybWF0aW9uIG1heVxuICogbGVhZCB0byBkZWdyYWRlZCBlcnJvciByZXBvcnRpbmcsIHRob3VnaC5cbiAqL1xuY2xhc3MgVG9rZW4ge1xuICAvLyBkb24ndCBleHBhbmQgdGhlIHRva2VuXG4gIC8vIHVzZWQgaW4gXFxub2V4cGFuZFxuICBjb25zdHJ1Y3Rvcih0ZXh0LCAvLyB0aGUgdGV4dCBvZiB0aGlzIHRva2VuXG4gIGxvYykge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLmxvYyA9IHZvaWQgMDtcbiAgICB0aGlzLm5vZXhwYW5kID0gdm9pZCAwO1xuICAgIHRoaXMudHJlYXRBc1JlbGF4ID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5sb2MgPSBsb2M7XG4gIH1cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGFpciBvZiB0b2tlbnMgKHRoaXMgYW5kIGVuZFRva2VuKSwgY29tcHV0ZSBhIGBUb2tlbmAgZW5jb21wYXNzaW5nXG4gICAqIHRoZSB3aG9sZSBpbnB1dCByYW5nZSBlbmNsb3NlZCBieSB0aGVzZSB0d28uXG4gICAqL1xuXG5cbiAgcmFuZ2UoZW5kVG9rZW4sIC8vIGxhc3QgdG9rZW4gb2YgdGhlIHJhbmdlLCBpbmNsdXNpdmVcbiAgdGV4dCAvLyB0aGUgdGV4dCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgdG9rZW5cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbih0ZXh0LCBTb3VyY2VMb2NhdGlvbi5yYW5nZSh0aGlzLCBlbmRUb2tlbikpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBQYXJzZUVycm9yIGNsYXNzLCB3aGljaCBpcyB0aGUgbWFpbiBlcnJvciB0aHJvd24gYnkgS2FUZVhcbiAqIGZ1bmN0aW9ucyB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZy4gVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGludGVybmFsXG4gKiBlcnJvcnMgZnJvbSBlcnJvcnMgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCB0aGUgdXNlciBwcm92aWRlZC5cbiAqXG4gKiBJZiBwb3NzaWJsZSwgYSBjYWxsZXIgc2hvdWxkIHByb3ZpZGUgYSBUb2tlbiBvciBQYXJzZU5vZGUgd2l0aCBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hlcmUgaW4gdGhlIHNvdXJjZSBzdHJpbmcgdGhlIHByb2JsZW0gb2NjdXJyZWQuXG4gKi9cbmNsYXNzIFBhcnNlRXJyb3Ige1xuICAvLyBFcnJvciBzdGFydCBwb3NpdGlvbiBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBMZW5ndGggb2YgYWZmZWN0ZWQgdGV4dCBiYXNlZCBvbiBwYXNzZWQtaW4gVG9rZW4gb3IgUGFyc2VOb2RlLlxuICAvLyBUaGUgdW5kZXJseWluZyBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYW55IGNvbnRleHQgYWRkZWQuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIC8vIFRoZSBlcnJvciBtZXNzYWdlXG4gIHRva2VuIC8vIEFuIG9iamVjdCBwcm92aWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb25cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gdm9pZCAwO1xuICAgIHRoaXMucG9zaXRpb24gPSB2b2lkIDA7XG4gICAgdGhpcy5sZW5ndGggPSB2b2lkIDA7XG4gICAgdGhpcy5yYXdNZXNzYWdlID0gdm9pZCAwO1xuICAgIHZhciBlcnJvciA9IFwiS2FUZVggcGFyc2UgZXJyb3I6IFwiICsgbWVzc2FnZTtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgbG9jID0gdG9rZW4gJiYgdG9rZW4ubG9jO1xuXG4gICAgaWYgKGxvYyAmJiBsb2Muc3RhcnQgPD0gbG9jLmVuZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgaW5wdXQgYW5kIGEgcG9zaXRpb24sIG1ha2UgdGhlIGVycm9yIGEgYml0IGZhbmNpZXJcbiAgICAgIC8vIEdldCB0aGUgaW5wdXRcbiAgICAgIHZhciBpbnB1dCA9IGxvYy5sZXhlci5pbnB1dDsgLy8gUHJlcGVuZCBzb21lIGluZm9ybWF0aW9uXG5cbiAgICAgIHN0YXJ0ID0gbG9jLnN0YXJ0O1xuICAgICAgZW5kID0gbG9jLmVuZDtcblxuICAgICAgaWYgKHN0YXJ0ID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgZXJyb3IgKz0gXCIgYXQgZW5kIG9mIGlucHV0OiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yICs9IFwiIGF0IHBvc2l0aW9uIFwiICsgKHN0YXJ0ICsgMSkgKyBcIjogXCI7XG4gICAgICB9IC8vIFVuZGVybGluZSB0b2tlbiBpbiBxdWVzdGlvbiB1c2luZyBjb21iaW5pbmcgdW5kZXJzY29yZXNcblxuXG4gICAgICB2YXIgdW5kZXJsaW5lZCA9IGlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpLnJlcGxhY2UoL1teXS9nLCBcIiQmXFx1MDMzMlwiKTsgLy8gRXh0cmFjdCBzb21lIGNvbnRleHQgZnJvbSB0aGUgaW5wdXQgYW5kIGFkZCBpdCB0byB0aGUgZXJyb3JcblxuICAgICAgdmFyIGxlZnQ7XG5cbiAgICAgIGlmIChzdGFydCA+IDE1KSB7XG4gICAgICAgIGxlZnQgPSBcIuKAplwiICsgaW5wdXQuc2xpY2Uoc3RhcnQgLSAxNSwgc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGlucHV0LnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJpZ2h0O1xuXG4gICAgICBpZiAoZW5kICsgMTUgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgcmlnaHQgPSBpbnB1dC5zbGljZShlbmQsIGVuZCArIDE1KSArIFwi4oCmXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaWdodCA9IGlucHV0LnNsaWNlKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIGVycm9yICs9IGxlZnQgKyB1bmRlcmxpbmVkICsgcmlnaHQ7XG4gICAgfSAvLyBTb21lIGhhY2tlcnkgdG8gbWFrZSBQYXJzZUVycm9yIGEgcHJvdG90eXBlIG9mIEVycm9yXG4gICAgLy8gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NjA3NTNcbiAgICAvLyAkRmxvd0ZpeE1lXG5cblxuICAgIHZhciBzZWxmID0gbmV3IEVycm9yKGVycm9yKTtcbiAgICBzZWxmLm5hbWUgPSBcIlBhcnNlRXJyb3JcIjsgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2VsZi5fX3Byb3RvX18gPSBQYXJzZUVycm9yLnByb3RvdHlwZTtcbiAgICBzZWxmLnBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RhcnQgIT0gbnVsbCAmJiBlbmQgIT0gbnVsbCkge1xuICAgICAgc2VsZi5sZW5ndGggPSBlbmQgLSBzdGFydDtcbiAgICB9XG5cbiAgICBzZWxmLnJhd01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbn0gLy8gJEZsb3dGaXhNZSBNb3JlIGhhY2tlcnlcblxuXG5QYXJzZUVycm9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBFcnJvci5wcm90b3R5cGU7XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZnVsIGluIG90aGVyXG4gKiBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIGEgbGlzdFxuICovXG52YXIgY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhsaXN0LCBlbGVtKSB7XG4gIHJldHVybiBsaXN0LmluZGV4T2YoZWxlbSkgIT09IC0xO1xufTtcbi8qKlxuICogUHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgaWYgYSBzZXR0aW5nIGlzIHVuZGVmaW5lZFxuICogTk9URTogQ291bGRuJ3QgdXNlIGBUYCBhcyB0aGUgb3V0cHV0IHR5cGUgZHVlIHRvIGZhY2Vib29rL2Zsb3cjNTAyMi5cbiAqL1xuXG5cbnZhciBkZWZsdCA9IGZ1bmN0aW9uIGRlZmx0KHNldHRpbmcsIGRlZmF1bHRJZlVuZGVmaW5lZCkge1xuICByZXR1cm4gc2V0dGluZyA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdElmVW5kZWZpbmVkIDogc2V0dGluZztcbn07IC8vIGh5cGhlbmF0ZSBhbmQgZXNjYXBlIGFkYXB0ZWQgZnJvbSBGYWNlYm9vaydzIFJlYWN0IHVuZGVyIEFwYWNoZSAyIGxpY2Vuc2VcblxuXG52YXIgdXBwZXJjYXNlID0gLyhbQS1aXSkvZztcblxudmFyIGh5cGhlbmF0ZSA9IGZ1bmN0aW9uIGh5cGhlbmF0ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHVwcGVyY2FzZSwgXCItJDFcIikudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBFU0NBUEVfTE9PS1VQID0ge1xuICBcIiZcIjogXCImYW1wO1wiLFxuICBcIj5cIjogXCImZ3Q7XCIsXG4gIFwiPFwiOiBcIiZsdDtcIixcbiAgXCJcXFwiXCI6IFwiJnF1b3Q7XCIsXG4gIFwiJ1wiOiBcIiYjeDI3O1wiXG59O1xudmFyIEVTQ0FQRV9SRUdFWCA9IC9bJj48XCInXS9nO1xuLyoqXG4gKiBFc2NhcGVzIHRleHQgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUodGV4dCkge1xuICByZXR1cm4gU3RyaW5nKHRleHQpLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCBtYXRjaCA9PiBFU0NBUEVfTE9PS1VQW21hdGNoXSk7XG59XG4vKipcbiAqIFNvbWV0aW1lcyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBpbm5lcm1vc3QgZWxlbWVudCBvZiBhIGdyb3VwLiBJbiBtb3N0XG4gKiBjYXNlcywgdGhpcyB3aWxsIGp1c3QgYmUgdGhlIGdyb3VwIGl0c2VsZiwgYnV0IHdoZW4gb3JkZ3JvdXBzIGFuZCBjb2xvcnMgaGF2ZVxuICogYSBzaW5nbGUgZWxlbWVudCwgd2Ugd2FudCB0byBwdWxsIHRoYXQgb3V0LlxuICovXG5cblxudmFyIGdldEJhc2VFbGVtID0gZnVuY3Rpb24gZ2V0QmFzZUVsZW0oZ3JvdXApIHtcbiAgaWYgKGdyb3VwLnR5cGUgPT09IFwib3JkZ3JvdXBcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiY29sb3JcIikge1xuICAgIGlmIChncm91cC5ib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHlbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLnR5cGUgPT09IFwiZm9udFwiKSB7XG4gICAgcmV0dXJuIGdldEJhc2VFbGVtKGdyb3VwLmJvZHkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBncm91cDtcbiAgfVxufTtcbi8qKlxuICogVGVYYm9vayBhbGdvcml0aG1zIG9mdGVuIHJlZmVyZW5jZSBcImNoYXJhY3RlciBib3hlc1wiLCB3aGljaCBhcmUgc2ltcGx5IGdyb3Vwc1xuICogd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlbS4gVG8gZGVjaWRlIGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBib3gsXG4gKiB3ZSBmaW5kIGl0cyBpbm5lcm1vc3QgZ3JvdXAsIGFuZCBzZWUgaWYgaXQgaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICovXG5cblxudmFyIGlzQ2hhcmFjdGVyQm94ID0gZnVuY3Rpb24gaXNDaGFyYWN0ZXJCb3goZ3JvdXApIHtcbiAgdmFyIGJhc2VFbGVtID0gZ2V0QmFzZUVsZW0oZ3JvdXApOyAvLyBUaGVzZSBhcmUgYWxsIHRoZXkgdHlwZXMgb2YgZ3JvdXBzIHdoaWNoIGhvbGQgc2luZ2xlIGNoYXJhY3RlcnNcblxuICByZXR1cm4gYmFzZUVsZW0udHlwZSA9PT0gXCJtYXRob3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJ0ZXh0b3JkXCIgfHwgYmFzZUVsZW0udHlwZSA9PT0gXCJhdG9tXCI7XG59O1xuXG52YXIgYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICcgKyBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIFJldHVybiB0aGUgcHJvdG9jb2wgb2YgYSBVUkwsIG9yIFwiX3JlbGF0aXZlXCIgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IGFcbiAqIHByb3RvY29sIChhbmQgdGh1cyBpcyByZWxhdGl2ZSkuXG4gKi9cblxudmFyIHByb3RvY29sRnJvbVVybCA9IGZ1bmN0aW9uIHByb3RvY29sRnJvbVVybCh1cmwpIHtcbiAgdmFyIHByb3RvY29sID0gL15cXHMqKFteXFxcXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyh1cmwpO1xuICByZXR1cm4gcHJvdG9jb2wgIT0gbnVsbCA/IHByb3RvY29sWzFdIDogXCJfcmVsYXRpdmVcIjtcbn07XG52YXIgdXRpbHMgPSB7XG4gIGNvbnRhaW5zLFxuICBkZWZsdCxcbiAgZXNjYXBlLFxuICBoeXBoZW5hdGUsXG4gIGdldEJhc2VFbGVtLFxuICBpc0NoYXJhY3RlckJveCxcbiAgcHJvdG9jb2xGcm9tVXJsXG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG4vLyBUT0RPOiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGRvY3VtZW50YXRpb25cbi8vIFRPRE86IGNoZWNrIGFsbCBwcm9wZXJ0aWVzIG9uIFNldHRpbmdzIGV4aXN0XG4vLyBUT0RPOiBjaGVjayB0aGUgdHlwZSBvZiBhIHByb3BlcnR5IG9uIFNldHRpbmdzIG1hdGNoZXNcbnZhciBTRVRUSU5HU19TQ0hFTUEgPSB7XG4gIGRpc3BsYXlNb2RlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIFwiICsgXCJkaXNwbGF5IHN0eWxlIChzbyBcXFxcaW50IGFuZCBcXFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgXCIgKyBcImNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLlwiLFxuICAgIGNsaTogXCItZCwgLS1kaXNwbGF5LW1vZGVcIlxuICB9LFxuICBvdXRwdXQ6IHtcbiAgICB0eXBlOiB7XG4gICAgICBlbnVtOiBbXCJodG1sQW5kTWF0aG1sXCIsIFwiaHRtbFwiLCBcIm1hdGhtbFwiXVxuICAgIH0sXG4gICAgZGVzY3JpcHRpb246IFwiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuXCIsXG4gICAgY2xpOiBcIi1GLCAtLWZvcm1hdCA8dHlwZT5cIlxuICB9LFxuICBsZXFubzoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLlwiXG4gIH0sXG4gIGZsZXFuOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LlwiXG4gIH0sXG4gIHRocm93T25FcnJvcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgY2xpOiBcIi10LCAtLW5vLXRocm93LW9uLWVycm9yXCIsXG4gICAgY2xpRGVzY3JpcHRpb246IFwiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc1wiICsgXCJ0ZWFkIG9mIHRocm93aW5nIGEgUGFyc2VFcnJvciBleGNlcHRpb24gd2hlbiBlbmNvdW50ZXJpbmcgYW4gZXJyb3IuXCJcbiAgfSxcbiAgZXJyb3JDb2xvcjoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCIjY2MwMDAwXCIsXG4gICAgY2xpOiBcIi1jLCAtLWVycm9yLWNvbG9yIDxjb2xvcj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJBIGNvbG9yIHN0cmluZyBnaXZlbiBpbiB0aGUgZm9ybWF0ICdyZ2InIG9yICdycmdnYmInIFwiICsgXCIobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgXCIgKyBcIi10IG9wdGlvbi5cIixcbiAgICBjbGlQcm9jZXNzb3I6IGNvbG9yID0+IFwiI1wiICsgY29sb3JcbiAgfSxcbiAgbWFjcm9zOiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBjbGk6IFwiLW0sIC0tbWFjcm8gPGRlZj5cIixcbiAgICBjbGlEZXNjcmlwdGlvbjogXCJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXFxcZm9vOmV4cGFuc2lvbicgKHVzZSBcIiArIFwibXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLlwiLFxuICAgIGNsaURlZmF1bHQ6IFtdLFxuICAgIGNsaVByb2Nlc3NvcjogKGRlZiwgZGVmcykgPT4ge1xuICAgICAgZGVmcy5wdXNoKGRlZik7XG4gICAgICByZXR1cm4gZGVmcztcbiAgICB9XG4gIH0sXG4gIG1pblJ1bGVUaGlja25lc3M6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcyxcIiArIFwiIGBcXFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXFxcaGxpbmVgLCBcIiArIFwiYFxcXFxoZGFzaGxpbmVgLCBgXFxcXHVuZGVybGluZWAsIGBcXFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgXCIgKyBcImBcXFxcZmJveGAsIGBcXFxcYm94ZWRgLCBhbmQgYFxcXFxmY29sb3Jib3hgLlwiLFxuICAgIHByb2Nlc3NvcjogdCA9PiBNYXRoLm1heCgwLCB0KSxcbiAgICBjbGk6IFwiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUZsb2F0XG4gIH0sXG4gIGNvbG9ySXNUZXh0Q29sb3I6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJNYWtlcyBcXFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcXFx0ZXh0Y29sb3IsIFwiICsgXCJpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcXFxjb2xvciBtb2RlIGNoYW5nZS5cIixcbiAgICBjbGk6IFwiLWIsIC0tY29sb3ItaXMtdGV4dC1jb2xvclwiXG4gIH0sXG4gIHN0cmljdDoge1xuICAgIHR5cGU6IFt7XG4gICAgICBlbnVtOiBbXCJ3YXJuXCIsIFwiaWdub3JlXCIsIFwiZXJyb3JcIl1cbiAgICB9LCBcImJvb2xlYW5cIiwgXCJmdW5jdGlvblwiXSxcbiAgICBkZXNjcmlwdGlvbjogXCJUdXJuIG9uIHN0cmljdCAvIExhVGVYIGZhaXRoZnVsbmVzcyBtb2RlLCB3aGljaCB0aHJvd3MgYW4gXCIgKyBcImVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguXCIsXG4gICAgY2xpOiBcIi1TLCAtLXN0cmljdFwiLFxuICAgIGNsaURlZmF1bHQ6IGZhbHNlXG4gIH0sXG4gIHRydXN0OiB7XG4gICAgdHlwZTogW1wiYm9vbGVhblwiLCBcImZ1bmN0aW9uXCJdLFxuICAgIGRlc2NyaXB0aW9uOiBcIlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXFxcdXJsLlwiLFxuICAgIGNsaTogXCItVCwgLS10cnVzdFwiXG4gIH0sXG4gIG1heFNpemU6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IEluZmluaXR5LFxuICAgIGRlc2NyaXB0aW9uOiBcIklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXCIgKyBcIlxcXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIFwiICsgXCJlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZVwiLFxuICAgIHByb2Nlc3NvcjogcyA9PiBNYXRoLm1heCgwLCBzKSxcbiAgICBjbGk6IFwiLXMsIC0tbWF4LXNpemUgPG4+XCIsXG4gICAgY2xpUHJvY2Vzc29yOiBwYXJzZUludFxuICB9LFxuICBtYXhFeHBhbmQ6IHtcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIGRlZmF1bHQ6IDEwMDAsXG4gICAgZGVzY3JpcHRpb246IFwiTGltaXQgdGhlIG51bWJlciBvZiBtYWNybyBleHBhbnNpb25zIHRvIHRoZSBzcGVjaWZpZWQgXCIgKyBcIm51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIFwiICsgXCJ0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLlwiLFxuICAgIHByb2Nlc3NvcjogbiA9PiBNYXRoLm1heCgwLCBuKSxcbiAgICBjbGk6IFwiLWUsIC0tbWF4LWV4cGFuZCA8bj5cIixcbiAgICBjbGlQcm9jZXNzb3I6IG4gPT4gbiA9PT0gXCJJbmZpbml0eVwiID8gSW5maW5pdHkgOiBwYXJzZUludChuKVxuICB9LFxuICBnbG9iYWxHcm91cDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGNsaTogZmFsc2VcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICBpZiAoc2NoZW1hLmRlZmF1bHQpIHtcbiAgICByZXR1cm4gc2NoZW1hLmRlZmF1bHQ7XG4gIH1cblxuICB2YXIgdHlwZSA9IHNjaGVtYS50eXBlO1xuICB2YXIgZGVmYXVsdFR5cGUgPSBBcnJheS5pc0FycmF5KHR5cGUpID8gdHlwZVswXSA6IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiBkZWZhdWx0VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVmYXVsdFR5cGUuZW51bVswXTtcbiAgfVxuXG4gIHN3aXRjaCAoZGVmYXVsdFR5cGUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gJyc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIDA7XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59XG4vKipcbiAqIFRoZSBtYWluIFNldHRpbmdzIG9iamVjdFxuICpcbiAqIFRoZSBjdXJyZW50IG9wdGlvbnMgc3RvcmVkIGFyZTpcbiAqICAtIGRpc3BsYXlNb2RlOiBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSB0eXBlc2V0IGFzIGlubGluZSBtYXRoXG4gKiAgICAgICAgICAgICAgICAgKGZhbHNlLCB0aGUgZGVmYXVsdCksIG1lYW5pbmcgdGhhdCB0aGUgbWF0aCBzdGFydHMgaW5cbiAqICAgICAgICAgICAgICAgICBcXHRleHRzdHlsZSBhbmQgaXMgcGxhY2VkIGluIGFuIGlubGluZS1ibG9jayk7IG9yIGFzIGRpc3BsYXlcbiAqICAgICAgICAgICAgICAgICBtYXRoICh0cnVlKSwgbWVhbmluZyB0aGF0IHRoZSBtYXRoIHN0YXJ0cyBpbiBcXGRpc3BsYXlzdHlsZVxuICogICAgICAgICAgICAgICAgIGFuZCBpcyBwbGFjZWQgaW4gYSBibG9jayB3aXRoIHZlcnRpY2FsIG1hcmdpbi5cbiAqL1xuXG5cbmNsYXNzIFNldHRpbmdzIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU1vZGUgPSB2b2lkIDA7XG4gICAgdGhpcy5vdXRwdXQgPSB2b2lkIDA7XG4gICAgdGhpcy5sZXFubyA9IHZvaWQgMDtcbiAgICB0aGlzLmZsZXFuID0gdm9pZCAwO1xuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdm9pZCAwO1xuICAgIHRoaXMuZXJyb3JDb2xvciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hY3JvcyA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5jb2xvcklzVGV4dENvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc3RyaWN0ID0gdm9pZCAwO1xuICAgIHRoaXMudHJ1c3QgPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhTaXplID0gdm9pZCAwO1xuICAgIHRoaXMubWF4RXhwYW5kID0gdm9pZCAwO1xuICAgIHRoaXMuZ2xvYmFsR3JvdXAgPSB2b2lkIDA7XG4gICAgLy8gYWxsb3cgbnVsbCBvcHRpb25zXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIFNFVFRJTkdTX1NDSEVNQSkge1xuICAgICAgaWYgKFNFVFRJTkdTX1NDSEVNQS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIHZhciBzY2hlbWEgPSBTRVRUSU5HU19TQ0hFTUFbcHJvcF07IC8vIFRPRE86IHZhbGlkYXRlIG9wdGlvbnNcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdICE9PSB1bmRlZmluZWQgPyBzY2hlbWEucHJvY2Vzc29yID8gc2NoZW1hLnByb2Nlc3NvcihvcHRpb25zW3Byb3BdKSA6IG9wdGlvbnNbcHJvcF0gOiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlcG9ydCBub25zdHJpY3QgKG5vbi1MYVRlWC1jb21wYXRpYmxlKSBpbnB1dC5cbiAgICogQ2FuIHNhZmVseSBub3QgYmUgY2FsbGVkIGlmIGB0aGlzLnN0cmljdGAgaXMgZmFsc2UgaW4gSmF2YVNjcmlwdC5cbiAgICovXG5cblxuICByZXBvcnROb25zdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pIHtcbiAgICB2YXIgc3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG5cbiAgICBpZiAodHlwZW9mIHN0cmljdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBBbGxvdyByZXR1cm4gdmFsdWUgb2Ygc3RyaWN0IGZ1bmN0aW9uIHRvIGJlIGJvb2xlYW4gb3Igc3RyaW5nXG4gICAgICAvLyAob3IgbnVsbC91bmRlZmluZWQsIG1lYW5pbmcgbm8gZnVydGhlciBwcm9jZXNzaW5nKS5cbiAgICAgIHN0cmljdCA9IHN0cmljdChlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKCFzdHJpY3QgfHwgc3RyaWN0ID09PSBcImlnbm9yZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChzdHJpY3QgPT09IHRydWUgfHwgc3RyaWN0ID09PSBcImVycm9yXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIiksIHRva2VuKTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIGFwcGx5IHN0cmljdCAoTGFUZVgtYWRoZXJpbmcpIGJlaGF2aW9yIGZvciB1bnVzdWFsXG4gICAqIGlucHV0IChsaWtlIGBcXFxcYCkuICBVbmxpa2UgYG5vbnN0cmljdGAsIHdpbGwgbm90IHRocm93IGFuIGVycm9yO1xuICAgKiBpbnN0ZWFkLCBcImVycm9yXCIgdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAsIHdoaWxlIFwiaWdub3JlXCJcbiAgICogdHJhbnNsYXRlcyB0byBhIHJldHVybiB2YWx1ZSBvZiBgZmFsc2VgLiAgTWF5IHN0aWxsIHByaW50IGEgd2FybmluZzpcbiAgICogXCJ3YXJuXCIgcHJpbnRzIGEgd2FybmluZyBhbmQgcmV0dXJucyBgZmFsc2VgLlxuICAgKiBUaGlzIGlzIGZvciB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGBlcnJvckNvZGVgcyBsaXN0ZWQgaW4gdGhlIFJFQURNRS5cbiAgICovXG5cblxuICB1c2VTdHJpY3RCZWhhdmlvcihlcnJvckNvZGUsIGVycm9yTXNnLCB0b2tlbikge1xuICAgIHZhciBzdHJpY3QgPSB0aGlzLnN0cmljdDtcblxuICAgIGlmICh0eXBlb2Ygc3RyaWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIEFsbG93IHJldHVybiB2YWx1ZSBvZiBzdHJpY3QgZnVuY3Rpb24gdG8gYmUgYm9vbGVhbiBvciBzdHJpbmdcbiAgICAgIC8vIChvciBudWxsL3VuZGVmaW5lZCwgbWVhbmluZyBubyBmdXJ0aGVyIHByb2Nlc3NpbmcpLlxuICAgICAgLy8gQnV0IGNhdGNoIGFueSBleGNlcHRpb25zIHRocm93biBieSBmdW5jdGlvbiwgdHJlYXRpbmcgdGhlbVxuICAgICAgLy8gbGlrZSBcImVycm9yXCIuXG4gICAgICB0cnkge1xuICAgICAgICBzdHJpY3QgPSBzdHJpY3QoZXJyb3JDb2RlLCBlcnJvck1zZywgdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyaWN0ID0gXCJlcnJvclwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3RyaWN0IHx8IHN0cmljdCA9PT0gXCJpZ25vcmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHN0cmljdCA9PT0gXCJ3YXJuXCIpIHtcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICd3YXJuJzogXCIgKyAoZXJyb3JNc2cgKyBcIiBbXCIgKyBlcnJvckNvZGUgKyBcIl1cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3b24ndCBoYXBwZW4gaW4gdHlwZS1zYWZlIGNvZGVcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvIFwiICsgKFwidW5yZWNvZ25pemVkICdcIiArIHN0cmljdCArIFwiJzogXCIgKyBlcnJvck1zZyArIFwiIFtcIiArIGVycm9yQ29kZSArIFwiXVwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRvIHRlc3QgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGlucHV0LCBhbmQgcmV0dXJuXG4gICAqIGB0cnVlYCAodHJ1c3RlZCkgb3IgYGZhbHNlYCAodW50cnVzdGVkKS4gIFRoZSBzb2xlIGFyZ3VtZW50IGBjb250ZXh0YFxuICAgKiBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggYGNvbW1hbmRgIGZpZWxkIHNwZWNpZnlpbmcgdGhlIHJlbGV2YW50IExhVGVYXG4gICAqIGNvbW1hbmQgKGFzIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggYFxcYCksIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzLCBldGMuXG4gICAqIElmIGBjb250ZXh0YCBoYXMgYSBgdXJsYCBmaWVsZCwgYSBgcHJvdG9jb2xgIGZpZWxkIHdpbGwgYXV0b21hdGljYWxseVxuICAgKiBnZXQgYWRkZWQgYnkgdGhpcyBmdW5jdGlvbiAoY2hhbmdpbmcgdGhlIHNwZWNpZmllZCBvYmplY3QpLlxuICAgKi9cblxuXG4gIGlzVHJ1c3RlZChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQudXJsICYmICFjb250ZXh0LnByb3RvY29sKSB7XG4gICAgICBjb250ZXh0LnByb3RvY29sID0gdXRpbHMucHJvdG9jb2xGcm9tVXJsKGNvbnRleHQudXJsKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3QgPSB0eXBlb2YgdGhpcy50cnVzdCA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy50cnVzdChjb250ZXh0KSA6IHRoaXMudHJ1c3Q7XG4gICAgcmV0dXJuIEJvb2xlYW4odHJ1c3QpO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYW5kIGNsYXNzZXMgZm9yIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHN0eWxlc1xuICogdXNlZCBpbiBUZVguIEl0IHByb3ZpZGVzIGEgZ2VuZXJpYyBgU3R5bGVgIGNsYXNzLCB3aGljaCBob2xkcyBpbmZvcm1hdGlvblxuICogYWJvdXQgYSBzcGVjaWZpYyBzdHlsZS4gSXQgdGhlbiBwcm92aWRlcyBpbnN0YW5jZXMgb2YgYWxsIHRoZSBkaWZmZXJlbnQga2luZHNcbiAqIG9mIHN0eWxlcyBwb3NzaWJsZSwgYW5kIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBtb3ZlIGJldHdlZW4gdGhlbSBhbmQgZ2V0XG4gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLlxuICovXG5cbi8qKlxuICogVGhlIG1haW4gc3R5bGUgY2xhc3MuIENvbnRhaW5zIGEgdW5pcXVlIGlkIGZvciB0aGUgc3R5bGUsIGEgc2l6ZSAod2hpY2ggaXNcbiAqIHRoZSBzYW1lIGZvciBjcmFtcGVkIGFuZCB1bmNyYW1wZWQgdmVyc2lvbiBvZiBhIHN0eWxlKSwgYW5kIGEgY3JhbXBlZCBmbGFnLlxuICovXG5jbGFzcyBTdHlsZSB7XG4gIGNvbnN0cnVjdG9yKGlkLCBzaXplLCBjcmFtcGVkKSB7XG4gICAgdGhpcy5pZCA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5jcmFtcGVkID0gdm9pZCAwO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuY3JhbXBlZCA9IGNyYW1wZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc3R5bGUgb2YgYSBzdXBlcnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuXG5cbiAgc3VwKCkge1xuICAgIHJldHVybiBzdHlsZXNbc3VwW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIHN1YnNjcmlwdCBnaXZlbiBhIGJhc2UgaW4gdGhlIGN1cnJlbnQgc3R5bGUuXG4gICAqL1xuXG5cbiAgc3ViKCkge1xuICAgIHJldHVybiBzdHlsZXNbc3ViW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzdHlsZSBvZiBhIGZyYWN0aW9uIG51bWVyYXRvciBnaXZlbiB0aGUgZnJhY3Rpb24gaW4gdGhlIGN1cnJlbnRcbiAgICogc3R5bGUuXG4gICAqL1xuXG5cbiAgZnJhY051bSgpIHtcbiAgICByZXR1cm4gc3R5bGVzW2ZyYWNOdW1bdGhpcy5pZF1dO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0eWxlIG9mIGEgZnJhY3Rpb24gZGVub21pbmF0b3IgZ2l2ZW4gdGhlIGZyYWN0aW9uIGluIHRoZSBjdXJyZW50XG4gICAqIHN0eWxlLlxuICAgKi9cblxuXG4gIGZyYWNEZW4oKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tmcmFjRGVuW3RoaXMuaWRdXTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjcmFtcGVkIHZlcnNpb24gb2YgYSBzdHlsZSAoaW4gcGFydGljdWxhciwgY3JhbXBpbmcgYSBjcmFtcGVkIHN0eWxlXG4gICAqIGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHlsZSkuXG4gICAqL1xuXG5cbiAgY3JhbXAoKSB7XG4gICAgcmV0dXJuIHN0eWxlc1tjcmFtcFt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgb3IgZGlzcGxheSB2ZXJzaW9uIG9mIHRoaXMgc3R5bGUuXG4gICAqL1xuXG5cbiAgdGV4dCgpIHtcbiAgICByZXR1cm4gc3R5bGVzW3RleHQkMVt0aGlzLmlkXV07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgc3R5bGUgaXMgdGlnaHRseSBzcGFjZWQgKHNjcmlwdHN0eWxlL3NjcmlwdHNjcmlwdHN0eWxlKVxuICAgKi9cblxuXG4gIGlzVGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA+PSAyO1xuICB9XG5cbn0gLy8gRXhwb3J0IGFuIGludGVyZmFjZSBmb3IgdHlwZSBjaGVja2luZywgYnV0IGRvbid0IGV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24uXG4vLyBUaGlzIHdheSwgbm8gbW9yZSBzdHlsZXMgY2FuIGJlIGdlbmVyYXRlZC5cblxuXG4vLyBJRHMgb2YgdGhlIGRpZmZlcmVudCBzdHlsZXNcbnZhciBEID0gMDtcbnZhciBEYyA9IDE7XG52YXIgVCA9IDI7XG52YXIgVGMgPSAzO1xudmFyIFMgPSA0O1xudmFyIFNjID0gNTtcbnZhciBTUyA9IDY7XG52YXIgU1NjID0gNzsgLy8gSW5zdGFuY2VzIG9mIHRoZSBkaWZmZXJlbnQgc3R5bGVzXG5cbnZhciBzdHlsZXMgPSBbbmV3IFN0eWxlKEQsIDAsIGZhbHNlKSwgbmV3IFN0eWxlKERjLCAwLCB0cnVlKSwgbmV3IFN0eWxlKFQsIDEsIGZhbHNlKSwgbmV3IFN0eWxlKFRjLCAxLCB0cnVlKSwgbmV3IFN0eWxlKFMsIDIsIGZhbHNlKSwgbmV3IFN0eWxlKFNjLCAyLCB0cnVlKSwgbmV3IFN0eWxlKFNTLCAzLCBmYWxzZSksIG5ldyBTdHlsZShTU2MsIDMsIHRydWUpXTsgLy8gTG9va3VwIHRhYmxlcyBmb3Igc3dpdGNoaW5nIGZyb20gb25lIHN0eWxlIHRvIGFub3RoZXJcblxudmFyIHN1cCA9IFtTLCBTYywgUywgU2MsIFNTLCBTU2MsIFNTLCBTU2NdO1xudmFyIHN1YiA9IFtTYywgU2MsIFNjLCBTYywgU1NjLCBTU2MsIFNTYywgU1NjXTtcbnZhciBmcmFjTnVtID0gW1QsIFRjLCBTLCBTYywgU1MsIFNTYywgU1MsIFNTY107XG52YXIgZnJhY0RlbiA9IFtUYywgVGMsIFNjLCBTYywgU1NjLCBTU2MsIFNTYywgU1NjXTtcbnZhciBjcmFtcCA9IFtEYywgRGMsIFRjLCBUYywgU2MsIFNjLCBTU2MsIFNTY107XG52YXIgdGV4dCQxID0gW0QsIERjLCBULCBUYywgVCwgVGMsIFQsIFRjXTsgLy8gV2Ugb25seSBleHBvcnQgc29tZSBvZiB0aGUgc3R5bGVzLlxuXG52YXIgU3R5bGUkMSA9IHtcbiAgRElTUExBWTogc3R5bGVzW0RdLFxuICBURVhUOiBzdHlsZXNbVF0sXG4gIFNDUklQVDogc3R5bGVzW1NdLFxuICBTQ1JJUFRTQ1JJUFQ6IHN0eWxlc1tTU11cbn07XG5cbi8qXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgVW5pY29kZSBzY3JpcHRzIGFuZCBzY3JpcHQgZmFtaWxpZXMgdGhhdCB3ZVxuICogc3VwcG9ydC4gVG8gYWRkIG5ldyBzY3JpcHRzIG9yIGZhbWlsaWVzLCBqdXN0IGFkZCBhIG5ldyBlbnRyeSB0byB0aGVcbiAqIHNjcmlwdERhdGEgYXJyYXkgYmVsb3cuIEFkZGluZyBzY3JpcHRzIHRvIHRoZSBzY3JpcHREYXRhIGFycmF5IGFsbG93c1xuICogY2hhcmFjdGVycyBmcm9tIHRoYXQgc2NyaXB0IHRvIGFwcGVhciBpbiBcXHRleHR7fSBlbnZpcm9ubWVudHMuXG4gKi9cblxuLyoqXG4gKiBFYWNoIHNjcmlwdCBvciBzY3JpcHQgZmFtaWx5IGhhcyBhIG5hbWUgYW5kIGFuIGFycmF5IG9mIGJsb2Nrcy5cbiAqIEVhY2ggYmxvY2sgaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgd2hpY2ggc3BlY2lmeSB0aGUgc3RhcnQgYW5kXG4gKiBlbmQgcG9pbnRzIChpbmNsdXNpdmUpIG9mIGEgYmxvY2sgb2YgVW5pY29kZSBjb2RlcG9pbnRzLlxuICovXG5cbi8qKlxuICogVW5pY29kZSBibG9jayBkYXRhIGZvciB0aGUgZmFtaWxpZXMgb2Ygc2NyaXB0cyB3ZSBzdXBwb3J0IGluIFxcdGV4dHt9LlxuICogU2NyaXB0cyBvbmx5IG5lZWQgdG8gYXBwZWFyIGhlcmUgaWYgdGhleSBkbyBub3QgaGF2ZSBmb250IG1ldHJpY3MuXG4gKi9cbnZhciBzY3JpcHREYXRhID0gW3tcbiAgLy8gTGF0aW4gY2hhcmFjdGVycyBiZXlvbmQgdGhlIExhdGluLTEgY2hhcmFjdGVycyB3ZSBoYXZlIG1ldHJpY3MgZm9yLlxuICAvLyBOZWVkZWQgZm9yIEN6ZWNoLCBIdW5nYXJpYW4gYW5kIFR1cmtpc2ggdGV4dCwgZm9yIGV4YW1wbGUuXG4gIG5hbWU6ICdsYXRpbicsXG4gIGJsb2NrczogW1sweDAxMDAsIDB4MDI0Zl0sIC8vIExhdGluIEV4dGVuZGVkLUEgYW5kIExhdGluIEV4dGVuZGVkLUJcbiAgWzB4MDMwMCwgMHgwMzZmXSAvLyBDb21iaW5pbmcgRGlhY3JpdGljYWwgbWFya3NcbiAgXVxufSwge1xuICAvLyBUaGUgQ3lyaWxsaWMgc2NyaXB0IHVzZWQgYnkgUnVzc2lhbiBhbmQgcmVsYXRlZCBsYW5ndWFnZXMuXG4gIC8vIEEgQ3lyaWxsaWMgc3Vic2V0IHVzZWQgdG8gYmUgc3VwcG9ydGVkIGFzIGV4cGxpY2l0bHkgZGVmaW5lZFxuICAvLyBzeW1ib2xzIGluIHN5bWJvbHMuanNcbiAgbmFtZTogJ2N5cmlsbGljJyxcbiAgYmxvY2tzOiBbWzB4MDQwMCwgMHgwNGZmXV1cbn0sIHtcbiAgLy8gQXJtZW5pYW5cbiAgbmFtZTogJ2FybWVuaWFuJyxcbiAgYmxvY2tzOiBbWzB4MDUzMCwgMHgwNThGXV1cbn0sIHtcbiAgLy8gVGhlIEJyYWhtaWMgc2NyaXB0cyBvZiBTb3V0aCBhbmQgU291dGhlYXN0IEFzaWFcbiAgLy8gRGV2YW5hZ2FyaSAoMDkwMOKAkzA5N0YpXG4gIC8vIEJlbmdhbGkgKDA5ODDigJMwOUZGKVxuICAvLyBHdXJtdWtoaSAoMEEwMOKAkzBBN0YpXG4gIC8vIEd1amFyYXRpICgwQTgw4oCTMEFGRilcbiAgLy8gT3JpeWEgKDBCMDDigJMwQjdGKVxuICAvLyBUYW1pbCAoMEI4MOKAkzBCRkYpXG4gIC8vIFRlbHVndSAoMEMwMOKAkzBDN0YpXG4gIC8vIEthbm5hZGEgKDBDODDigJMwQ0ZGKVxuICAvLyBNYWxheWFsYW0gKDBEMDDigJMwRDdGKVxuICAvLyBTaW5oYWxhICgwRDgw4oCTMERGRilcbiAgLy8gVGhhaSAoMEUwMOKAkzBFN0YpXG4gIC8vIExhbyAoMEU4MOKAkzBFRkYpXG4gIC8vIFRpYmV0YW4gKDBGMDDigJMwRkZGKVxuICAvLyBNeWFubWFyICgxMDAw4oCTMTA5RilcbiAgbmFtZTogJ2JyYWhtaWMnLFxuICBibG9ja3M6IFtbMHgwOTAwLCAweDEwOUZdXVxufSwge1xuICBuYW1lOiAnZ2VvcmdpYW4nLFxuICBibG9ja3M6IFtbMHgxMEEwLCAweDEwZmZdXVxufSwge1xuICAvLyBDaGluZXNlIGFuZCBKYXBhbmVzZS5cbiAgLy8gVGhlIFwia1wiIGluIGNqayBpcyBmb3IgS29yZWFuLCBidXQgd2UndmUgc2VwYXJhdGVkIEtvcmVhbiBvdXRcbiAgbmFtZTogXCJjamtcIixcbiAgYmxvY2tzOiBbWzB4MzAwMCwgMHgzMEZGXSwgLy8gQ0pLIHN5bWJvbHMgYW5kIHB1bmN0dWF0aW9uLCBIaXJhZ2FuYSwgS2F0YWthbmFcbiAgWzB4NEUwMCwgMHg5RkFGXSwgLy8gQ0pLIGlkZW9ncmFtc1xuICBbMHhGRjAwLCAweEZGNjBdIC8vIEZ1bGx3aWR0aCBwdW5jdHVhdGlvblxuICAvLyBUT0RPOiBhZGQgaGFsZndpZHRoIEthdGFrYW5hIGFuZCBSb21hbmppIGdseXBoc1xuICBdXG59LCB7XG4gIC8vIEtvcmVhblxuICBuYW1lOiAnaGFuZ3VsJyxcbiAgYmxvY2tzOiBbWzB4QUMwMCwgMHhEN0FGXV1cbn1dO1xuLyoqXG4gKiBHaXZlbiBhIGNvZGVwb2ludCwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgb3Igc2NyaXB0IGZhbWlseVxuICogaXQgaXMgZnJvbSwgb3IgbnVsbCBpZiBpdCBpcyBub3QgcGFydCBvZiBhIGtub3duIGJsb2NrXG4gKi9cblxuZnVuY3Rpb24gc2NyaXB0RnJvbUNvZGVwb2ludChjb2RlcG9pbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHREYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdERhdGFbaV07XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgc2NyaXB0LmJsb2Nrcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBibG9jayA9IHNjcmlwdC5ibG9ja3NbX2ldO1xuXG4gICAgICBpZiAoY29kZXBvaW50ID49IGJsb2NrWzBdICYmIGNvZGVwb2ludCA8PSBibG9ja1sxXSkge1xuICAgICAgICByZXR1cm4gc2NyaXB0Lm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEEgZmxhdHRlbmVkIHZlcnNpb24gb2YgYWxsIHRoZSBzdXBwb3J0ZWQgYmxvY2tzIGluIGEgc2luZ2xlIGFycmF5LlxuICogVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWFrZSBzdXBwb3J0ZWRDb2RlcG9pbnQoKSBmYXN0LlxuICovXG5cbnZhciBhbGxCbG9ja3MgPSBbXTtcbnNjcmlwdERhdGEuZm9yRWFjaChzID0+IHMuYmxvY2tzLmZvckVhY2goYiA9PiBhbGxCbG9ja3MucHVzaCguLi5iKSkpO1xuLyoqXG4gKiBHaXZlbiBhIGNvZGVwb2ludCwgcmV0dXJuIHRydWUgaWYgaXQgZmFsbHMgd2l0aGluIG9uZSBvZiB0aGVcbiAqIHNjcmlwdHMgb3Igc2NyaXB0IGZhbWlsaWVzIGRlZmluZWQgYWJvdmUgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBNaWNybyBiZW5jaG1hcmtzIHNob3dzIHRoYXQgdGhpcyBpcyBmYXN0ZXIgdGhhblxuICogL1tcXHUzMDAwLVxcdTMwRkZcXHU0RTAwLVxcdTlGQUZcXHVGRjAwLVxcdUZGNjBcXHVBQzAwLVxcdUQ3QUZcXHUwOTAwLVxcdTEwOUZdLy50ZXN0KClcbiAqIGluIEZpcmVmb3gsIENocm9tZSBhbmQgTm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBzdXBwb3J0ZWRDb2RlcG9pbnQoY29kZXBvaW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsQmxvY2tzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGNvZGVwb2ludCA+PSBhbGxCbG9ja3NbaV0gJiYgY29kZXBvaW50IDw9IGFsbEJsb2Nrc1tpICsgMV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc3VwcG9ydCB0byBkb21UcmVlLmpzIGFuZCBkZWxpbWl0ZXIuanMuXG4gKiBJdCdzIGEgc3RvcmVob3VzZSBvZiBwYXRoIGdlb21ldHJ5IGZvciBTVkcgaW1hZ2VzLlxuICovXG4vLyBJbiBhbGwgcGF0aHMgYmVsb3csIHRoZSB2aWV3Qm94LXRvLWVtIHNjYWxlIGlzIDEwMDA6MS5cbnZhciBoTGluZVBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIGEgc3FydCB2aW5jdWx1bS4gUHJldmVudHMgaW1hZ2UgY3JvcHBpbmcuXG4vLyBUaGUgdmluY3VsdW0gb2YgYSBcXHNxcnQgY2FuIGJlIG1hZGUgdGhpY2tlciBieSBhIEthVGVYIHJlbmRlcmluZyBvcHRpb24uXG4vLyBUaGluayBvZiB2YXJpYWJsZSBleHRyYVZpbmN1bHVtIGFzIHR3byBkZXRvdXJzIGluIHRoZSBTVkcgcGF0aC5cbi8vIFRoZSBkZXRvdXIgYmVnaW5zIGF0IHRoZSBsb3dlciBsZWZ0IG9mIHRoZSBhcmVhIGxhYmVsZWQgZXh0cmFWaW5jdWx1bSBiZWxvdy5cbi8vIFRoZSBkZXRvdXIgcHJvY2VlZHMgb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UgdXAgYW5kIHNsaWdodGx5IHRvIHRoZSByaWdodCxcbi8vIGRpc3BsYWNpbmcgdGhlIHJhZGl1c2VkIGNvcm5lciBiZXR3ZWVuIHN1cmQgYW5kIHZpbmN1bHVtLiBUaGUgcmFkaXVzIGlzXG4vLyB0cmF2ZXJzZWQgYXMgdXN1YWwsIHRoZW4gdGhlIGRldG91ciByZXN1bWVzLiBJdCBnb2VzIHJpZ2h0LCB0byB0aGUgZW5kIG9mXG4vLyB0aGUgdmVyeSBsb25nIHZpbmN1bHVtLCB0aGVuIGRvd24gb25lIGV4dHJhVmluY3VsdW0gZGlzdGFuY2UsXG4vLyBhZnRlciB3aGljaCBpdCByZXN1bWVzIHJlZ3VsYXIgcGF0aCBnZW9tZXRyeSBmb3IgdGhlIHJhZGljYWwuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aW5jdWx1bVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuICAgICAgICAgL+KWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKWkuKGkGV4dHJhVmluY3VsdW1cbiAgICAgICAgLyDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojihpAwLjA0ZW0gKDQwIHVuaXQpIHN0ZCB2aW5jdWx1bSB0aGlja25lc3NcbiAgICAgICAvIC9cbiAgICAgIC8gL1xuICAgICAvIC9cXFxuICAgIC8gLyBzdXJkXG4qL1xuXG52YXIgc3FydE1haW4gPSBmdW5jdGlvbiBzcXJ0TWFpbihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCkge1xuICAvLyBzcXJ0TWFpbiBwYXRoIGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVggTWFpblxuICByZXR1cm4gXCJNOTUsXCIgKyAoNjIyICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxuYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNFxcbmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTRcXG5jNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwXFxuczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5XFxuYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gMi4wNzUgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNS4zLC05LjMsMTIsLTE0LDIwLC0xNFxcbkg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiSDg0NS4yNzI0XFxucy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksN1xcbmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3elxcbk1cIiArICg4MzQgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUxID0gZnVuY3Rpb24gc3FydFNpemUxKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUxIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTEtUmVndWxhclxuICByZXR1cm4gXCJNMjYzLFwiICsgKDYwMSArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcImMwLjcsMCwxOCwzOS43LDUyLDExOVxcbmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjBcXG5jMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2N1xcbmxcIiArIGV4dHJhVmluY3VsdW0gLyAyLjA4NCArIFwiIC1cIiArIGV4dHJhVmluY3VsdW0gKyBcIlxcbmM0LjcsLTcuMywxMSwtMTEsMTksLTExXFxuSDQwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkgxMDEyLjNcXG5zLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMlxcbmMtMjIuMyw0Ni43LC0zMy44LDcwLjMsLTM0LjUsNzFjLTQuNyw0LjcsLTEyLjMsNywtMjMsN3MtMTIsLTEsLTEyLC0xXFxucy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjZcXG5jLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6XFxuTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUyID0gZnVuY3Rpb24gc3FydFNpemUyKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUyIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTItUmVndWxhclxuICByZXR1cm4gXCJNOTgzIFwiICsgKDEwICsgZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiXFxubFwiICsgZXh0cmFWaW5jdWx1bSAvIDMuMTMgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJcXG5IMTAxMy4xcy04My40LDI2OCwtMjY0LjEsODQwYy0xODAuNyw1NzIsLTI3Nyw4NzYuMywtMjg5LDkxM2MtNC43LDQuNywtMTIuNyw3LC0yNCw3XFxucy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDRcXG5jLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwXFxuYzI2LjcsLTMyLjcsNTIsLTYzLDc2LC05MXM1MiwtNjAsNTIsLTYwczIwOCw3MjIsMjA4LDcyMlxcbmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjVcXG5jNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6XFxuTVwiICsgKDEwMDEgKyBleHRyYVZpbmN1bHVtKSArIFwiIFwiICsgaExpbmVQYWQgKyBcImg0MDAwMDB2XCIgKyAoNDAgKyBleHRyYVZpbmN1bHVtKSArIFwiaC00MDAwMDB6XCI7XG59O1xuXG52YXIgc3FydFNpemUzID0gZnVuY3Rpb24gc3FydFNpemUzKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKSB7XG4gIC8vIHNpemUzIGlzIGZyb20gZ2x5cGggVTIyMUEgaW4gdGhlIGZvbnQgS2FUZVhfU2l6ZTMtUmVndWxhclxuICByZXR1cm4gXCJNNDI0LFwiICsgKDIzOTggKyBleHRyYVZpbmN1bHVtICsgaExpbmVQYWQpICsgXCJcXG5jLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNFxcbmMwLC0yLC0xMC43LDE0LjMsLTMyLDQ5Yy00LjcsNy4zLC05LjgsMTUuNywtMTUuNSwyNWMtNS43LDkuMywtOS44LDE2LC0xMi41LDIwXFxucy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxXFxuczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODFcXG5sXCIgKyBleHRyYVZpbmN1bHVtIC8gNC4yMjMgKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMFxcbnZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNC42XFxucy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NVxcbmMtMiw2LC0xMCw5LC0yNCw5XFxuYy04LDAsLTEyLC0wLjcsLTEyLC0yeiBNXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiXFxuaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJoLTQwMDAwMHpcIjtcbn07XG5cbnZhciBzcXJ0U2l6ZTQgPSBmdW5jdGlvbiBzcXJ0U2l6ZTQoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpIHtcbiAgLy8gc2l6ZTQgaXMgZnJvbSBnbHlwaCBVMjIxQSBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIHJldHVybiBcIk00NzMsXCIgKyAoMjcxMyArIGV4dHJhVmluY3VsdW0gKyBoTGluZVBhZCkgKyBcIlxcbmMzMzkuMywtMTc5OS4zLDUwOS4zLC0yNzAwLDUxMCwtMjcwMiBsXCIgKyBleHRyYVZpbmN1bHVtIC8gNS4yOTggKyBcIiAtXCIgKyBleHRyYVZpbmN1bHVtICsgXCJcXG5jMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNy43XFxucy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDlcXG5jLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMFxcbmMwLC0xLjMsLTUuMyw4LjcsLTE2LDMwYy0xMC43LDIxLjMsLTIxLjMsNDIuNywtMzIsNjRzLTE2LDMzLC0xNiwzM3MtMjYsLTI2LC0yNiwtMjZcXG5zNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LFxcbjYwNnpNXCIgKyAoMTAwMSArIGV4dHJhVmluY3VsdW0pICsgXCIgXCIgKyBoTGluZVBhZCArIFwiaDQwMDAwMHZcIiArICg0MCArIGV4dHJhVmluY3VsdW0pICsgXCJIMTAxNy43elwiO1xufTtcblxudmFyIHBoYXNlUGF0aCA9IGZ1bmN0aW9uIHBoYXNlUGF0aCh5KSB7XG4gIHZhciB4ID0geSAvIDI7IC8vIHggY29vcmRpbmF0ZSBhdCB0b3Agb2YgYW5nbGVcblxuICByZXR1cm4gXCJNNDAwMDAwIFwiICsgeSArIFwiIEgwIExcIiArIHggKyBcIiAwIGw2NSA0NSBMMTQ1IFwiICsgKHkgLSA4MCkgKyBcIiBINDAwMDAwelwiO1xufTtcblxudmFyIHNxcnRUYWxsID0gZnVuY3Rpb24gc3FydFRhbGwoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQsIHZpZXdCb3hIZWlnaHQpIHtcbiAgLy8gc3FydFRhbGwgaXMgZnJvbSBnbHlwaCBVMjNCNyBpbiB0aGUgZm9udCBLYVRlWF9TaXplNC1SZWd1bGFyXG4gIC8vIE9uZSBwYXRoIGVkZ2UgaGFzIGEgdmFyaWFibGUgbGVuZ3RoLiBJdCBydW5zIHZlcnRpY2FsbHkgZnJvbSB0aGUgdmluY3VsdW1cbiAgLy8gdG8gYSBwb2ludCBuZWFyICgxNCB1bml0cykgdGhlIGJvdHRvbSBvZiB0aGUgc3VyZC4gVGhlIHZpbmN1bHVtXG4gIC8vIGlzIG5vcm1hbGx5IDQwIHVuaXRzIHRoaWNrLiBTbyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lIGluIHF1ZXN0aW9uIGlzOlxuICB2YXIgdmVydFNlZ21lbnQgPSB2aWV3Qm94SGVpZ2h0IC0gNTQgLSBoTGluZVBhZCAtIGV4dHJhVmluY3VsdW07XG4gIHJldHVybiBcIk03MDIgXCIgKyAoZXh0cmFWaW5jdWx1bSArIGhMaW5lUGFkKSArIFwiSDQwMDAwMFwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIlxcbkg3NDJ2XCIgKyB2ZXJ0U2VnbWVudCArIFwibC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxXFxuaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MFxcbmMtNC0zLjMzMy04LjMzMy03LjY2Ny0xMyAtMTNsLTEzLTEzbDc3LTE1NSA3Ny0xNTZjNjYgMTk5LjMzMyAxMzkgNDE5LjY2N1xcbjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBcIiArIGhMaW5lUGFkICsgXCJINDAwMDAwdlwiICsgKDQwICsgZXh0cmFWaW5jdWx1bSkgKyBcIkg3NDJ6XCI7XG59O1xuXG52YXIgc3FydFBhdGggPSBmdW5jdGlvbiBzcXJ0UGF0aChzaXplLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KSB7XG4gIGV4dHJhVmluY3VsdW0gPSAxMDAwICogZXh0cmFWaW5jdWx1bTsgLy8gQ29udmVydCBmcm9tIGRvY3VtZW50IGVtcyB0byB2aWV3Qm94LlxuXG4gIHZhciBwYXRoID0gXCJcIjtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlIFwic3FydE1haW5cIjpcbiAgICAgIHBhdGggPSBzcXJ0TWFpbihleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTFcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTEoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFNpemUyXCI6XG4gICAgICBwYXRoID0gc3FydFNpemUyKGV4dHJhVmluY3VsdW0sIGhMaW5lUGFkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInNxcnRTaXplM1wiOlxuICAgICAgcGF0aCA9IHNxcnRTaXplMyhleHRyYVZpbmN1bHVtLCBoTGluZVBhZCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJzcXJ0U2l6ZTRcIjpcbiAgICAgIHBhdGggPSBzcXJ0U2l6ZTQoZXh0cmFWaW5jdWx1bSwgaExpbmVQYWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwic3FydFRhbGxcIjpcbiAgICAgIHBhdGggPSBzcXJ0VGFsbChleHRyYVZpbmN1bHVtLCBoTGluZVBhZCwgdmlld0JveEhlaWdodCk7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn07XG52YXIgaW5uZXJQYXRoID0gZnVuY3Rpb24gaW5uZXJQYXRoKG5hbWUsIGhlaWdodCkge1xuICAvLyBUaGUgaW5uZXIgcGFydCBvZiBzdHJldGNoeSB0YWxsIGRlbGltaXRlcnNcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSBcIlxcdTIzOWNcIjpcbiAgICAgIHJldHVybiBcIk0yOTEgMCBINDE3IFZcIiArIGhlaWdodCArIFwiIEgyOTF6IE0yOTEgMCBINDE3IFZcIiArIGhlaWdodCArIFwiIEgyOTF6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjIyM1wiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXogTTE0NSAwIEgxODggVlwiICsgaGVpZ2h0ICsgXCIgSDE0NXpcIjtcblxuICAgIGNhc2UgXCJcXHUyMjI1XCI6XG4gICAgICByZXR1cm4gXCJNMTQ1IDAgSDE4OCBWXCIgKyBoZWlnaHQgKyBcIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWXCIgKyBoZWlnaHQgKyBcIiBIMTQ1elwiICsgKFwiTTM2NyAwIEg0MTAgVlwiICsgaGVpZ2h0ICsgXCIgSDM2N3ogTTM2NyAwIEg0MTAgVlwiICsgaGVpZ2h0ICsgXCIgSDM2N3pcIik7XG5cbiAgICBjYXNlIFwiXFx1MjM5ZlwiOlxuICAgICAgcmV0dXJuIFwiTTQ1NyAwIEg1ODMgVlwiICsgaGVpZ2h0ICsgXCIgSDQ1N3ogTTQ1NyAwIEg1ODMgVlwiICsgaGVpZ2h0ICsgXCIgSDQ1N3pcIjtcblxuICAgIGNhc2UgXCJcXHUyM2EyXCI6XG4gICAgICByZXR1cm4gXCJNMzE5IDAgSDQwMyBWXCIgKyBoZWlnaHQgKyBcIiBIMzE5eiBNMzE5IDAgSDQwMyBWXCIgKyBoZWlnaHQgKyBcIiBIMzE5elwiO1xuXG4gICAgY2FzZSBcIlxcdTIzYTVcIjpcbiAgICAgIHJldHVybiBcIk0yNjMgMCBIMzQ3IFZcIiArIGhlaWdodCArIFwiIEgyNjN6IE0yNjMgMCBIMzQ3IFZcIiArIGhlaWdodCArIFwiIEgyNjN6XCI7XG5cbiAgICBjYXNlIFwiXFx1MjNhYVwiOlxuICAgICAgcmV0dXJuIFwiTTM4NCAwIEg1MDQgVlwiICsgaGVpZ2h0ICsgXCIgSDM4NHogTTM4NCAwIEg1MDQgVlwiICsgaGVpZ2h0ICsgXCIgSDM4NHpcIjtcblxuICAgIGNhc2UgXCJcXHUyM2QwXCI6XG4gICAgICByZXR1cm4gXCJNMzEyIDAgSDM1NSBWXCIgKyBoZWlnaHQgKyBcIiBIMzEyeiBNMzEyIDAgSDM1NSBWXCIgKyBoZWlnaHQgKyBcIiBIMzEyelwiO1xuXG4gICAgY2FzZSBcIlxcdTIwMTZcIjpcbiAgICAgIHJldHVybiBcIk0yNTcgMCBIMzAwIFZcIiArIGhlaWdodCArIFwiIEgyNTd6IE0yNTcgMCBIMzAwIFZcIiArIGhlaWdodCArIFwiIEgyNTd6XCIgKyAoXCJNNDc4IDAgSDUyMSBWXCIgKyBoZWlnaHQgKyBcIiBINDc4eiBNNDc4IDAgSDUyMSBWXCIgKyBoZWlnaHQgKyBcIiBINDc4elwiKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgfVxufTtcbnZhciBwYXRoID0ge1xuICAvLyBUaGUgZG91YmxlbGVmdGFycm93IGdlb21ldHJ5IGlzIGZyb20gZ2x5cGggVSsyMUQwIGluIHRoZSBmb250IEthVGVYIE1haW5cbiAgZG91YmxlbGVmdGFycm93OiBcIk0yNjIgMTU3XFxubDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zXFxuIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjhcXG4gMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41XFxuYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjVcXG4gMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3XFxuLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjdcXG4tMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6XFxubTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwelwiLFxuICAvLyBkb3VibGVyaWdodGFycm93IGlzIGZyb20gZ2x5cGggVSsyMUQyIGluIGZvbnQgS2FUZVggTWFpblxuICBkb3VibGVyaWdodGFycm93OiBcIk0zOTk3MzggMzkybFxcbi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41XFxuIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OFxcbi0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjhcXG4tMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMThcXG4tMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODJcXG5jLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjNcXG4tMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6XCIsXG4gIC8vIGxlZnRhcnJvdyBpcyBmcm9tIGdseXBoIFUrMjE5MCBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGFycm93OiBcIk00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMFxcbiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOFxcbi01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3XFxuYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOFxcbiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjNcXG4gMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDJcXG4gbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIG92ZXJicmFjZSBpcyBmcm9tIGdseXBocyBVKzIzQTkvMjNBOC8yM0E3IGluIGZvbnQgS2FUZVhfU2l6ZTQtUmVndWxhclxuICBsZWZ0YnJhY2U6IFwiTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExN1xcbi00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjdcXG4gNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6XCIsXG4gIGxlZnRicmFjZXVuZGVyOiBcIk0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxM1xcbiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODhcXG4gMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjdcXG4tMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6XCIsXG4gIC8vIG92ZXJncm91cCBpcyBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlIChwdWJsaWMgZG9tYWluKVxuICBsZWZ0Z3JvdXA6IFwiTTQwMDAwMCA4MFxcbkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDBcXG4gNDM1IDBoMzk5NTY1elwiLFxuICBsZWZ0Z3JvdXB1bmRlcjogXCJNNDAwMDAwIDI2Mlxcbkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOVxcbiA0MzUgMjE5aDM5OTU2NXpcIixcbiAgLy8gSGFycG9vbnMgYXJlIGZyb20gZ2x5cGggVSsyMUJEIGluIGZvbnQgS2FUZVggTWFpblxuICBsZWZ0aGFycG9vbjogXCJNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuM1xcbi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1XFxuLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjdcXG4tMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25wbHVzOiBcIk0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNVxcbiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuM1xcbi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjdcXG4tMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwelxcbm0wIDB2NDBoNDAwMDAwdi00MHpcIixcbiAgbGVmdGhhcnBvb25kb3duOiBcIk03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzXFxuIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1XFxuIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjdcXG4tMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6XCIsXG4gIGxlZnRoYXJwb29uZG93bnBsdXM6IFwiTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTJcXG4gMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuN1xcbi0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMFxcbnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgLy8gaG9vayBpcyBmcm9tIGdseXBoIFUrMjFBOSBpbiBmb250IEthVGVYIE1haW5cbiAgbGVmdGhvb2s6IFwiTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjVcXG4tODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuM1xcbi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMVxcbiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwelwiLFxuICBsZWZ0bGluZXNlZ21lbnQ6IFwiTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpcXG5NNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwelwiLFxuICBsZWZ0bWFwc3RvOiBcIk00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6XFxuTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpcIixcbiAgLy8gdG9mcm9tIGlzIGZyb20gZ2x5cGggVSsyMUM0IGluIGZvbnQgS2FUZVggQU1TIFJlZ3VsYXJcbiAgbGVmdFRvRnJvbTogXCJNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjNcXG4tLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LThcXG5jMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zXFxuIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwelwiLFxuICBsb25nZXF1YWw6IFwiTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XFxuTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6XCIsXG4gIG1pZGJyYWNlOiBcIk0yMDA0MjggMzM0XFxuYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNFxcbi01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuN1xcbiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMVxcbiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwelwiLFxuICBtaWRicmFjZXVuZGVyOiBcIk0xOTk1NzIgMjE0XFxuYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNFxcbiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjNcXG4gMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDBcXG4tNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpcIixcbiAgb2lpbnRTaXplMTogXCJNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42XFxuLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yelxcbm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjhcXG42MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44elwiLFxuICBvaWludFNpemUyOiBcIk03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOFxcbi00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6XFxubTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yXFxuYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6XCIsXG4gIG9paWludFNpemUxOiBcIk02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjZcXG4tNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6XFxubTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDBcXG44NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6XCIsXG4gIG9paWludFNpemUyOiBcIk0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOFxcbi03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzelxcbm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xXFxuYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40elwiLFxuICByaWdodGFycm93OiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4XFxuLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjBcXG4gMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43XFxuIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1XFxuLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41XFxuLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjdcXG4gMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0YnJhY2U6IFwiTTQwMDAwMCA1NDJsXFxuLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNVxcbnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxXFxuYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1elwiLFxuICByaWdodGJyYWNldW5kZXI6IFwiTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuM1xcbiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3XFxuLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3elwiLFxuICByaWdodGdyb3VwOiBcIk0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMFxcbiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwelwiLFxuICByaWdodGdyb3VwdW5kZXI6IFwiTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOFxcbiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6XCIsXG4gIHJpZ2h0aGFycG9vbjogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuM1xcbi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMlxcbi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNThcXG4gNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29ucGx1czogXCJNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMVxcbi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuN1xcbiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41elxcbm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6XCIsXG4gIHJpZ2h0aGFycG9vbmRvd246IFwiTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOFxcbiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNVxcbi03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1XFxuLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpcIixcbiAgcmlnaHRoYXJwb29uZG93bnBsdXM6IFwiTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOFxcbiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuM1xcbiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuM1xcbi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHpcXG5tMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6XCIsXG4gIHJpZ2h0aG9vazogXCJNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjNcXG4gMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDBcXG4tMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxXFxuIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwelwiLFxuICByaWdodGxpbmVzZWdtZW50OiBcIk0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpcXG5NMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6XCIsXG4gIHJpZ2h0VG9Gcm9tOiBcIk00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjNcXG4gMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyXFxuLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0Mlxcbi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHR3b2hlYWRsZWZ0YXJyb3cgaXMgZnJvbSBnbHlwaCBVKzIxOUUgaW4gZm9udCBLYVRlWCBBTVMgUmVndWxhclxuICB0d29oZWFkbGVmdGFycm93OiBcIk0wIDE2N2M2OCA0MFxcbiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5XFxuLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuM1xcbi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOVxcbi0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMVxcbiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6XCIsXG4gIHR3b2hlYWRyaWdodGFycm93OiBcIk00MDAwMDAgMTY3XFxuYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zXFxuIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MlxcbiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzM1xcbi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwXFxuIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6XCIsXG4gIC8vIHRpbGRlMSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHRpbGRlMTogXCJNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTdcXG4tMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMFxcbiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDBcXG4gNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOFxcbi02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpcIixcbiAgLy8gZGl0dG8gdGlsZGUyLCB0aWxkZTMsICYgdGlsZGU0XG4gIHRpbGRlMjogXCJNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4XFxuLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45XFxuIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0XFxuYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTFcXG4gMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxelwiLFxuICB0aWxkZTM6IFwiTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTdcXG4tMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDBcXG4gNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTdcXG4gMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NlxcbiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6XCIsXG4gIHRpbGRlNDogXCJNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NVxcbi0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOVxcbiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOVxcbiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5XFxuIC0xNzUuMjM2LTc0NC0xNzUuMjM2elwiLFxuICAvLyB2ZWMgaXMgZnJvbSBnbHlwaCBVKzIwRDcgaW4gZm9udCBLYVRlWCBNYWluXG4gIHZlYzogXCJNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNVxcbjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTFcXG4xMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjNcXG4tMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDFcXG4tNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5XFxuSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OVxcbmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5elwiLFxuICAvLyB3aWRlaGF0MSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgYSBnbHlwaCBmcm9tIHRoZSBNblN5bWJvbCBwYWNrYWdlXG4gIHdpZGVoYXQxOiBcIk01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyXFxuYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzelwiLFxuICAvLyBkaXR0byB3aWRlaGF0Miwgd2lkZWhhdDMsICYgd2lkZWhhdDRcbiAgd2lkZWhhdDI6IFwiTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMFxcbi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExelwiLFxuICB3aWRlaGF0MzogXCJNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwXFxuLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6XCIsXG4gIHdpZGVoYXQ0OiBcIk0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTBcXG4tMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpcIixcbiAgLy8gd2lkZWNoZWNrIHBhdGhzIGFyZSBhbGwgaW52ZXJ0ZWQgdmVyc2lvbnMgb2Ygd2lkZWhhdFxuICB3aWRlY2hlY2sxOiBcIk01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLFxcbi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pcIixcbiAgd2lkZWNoZWNrMjogXCJNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLFxcbi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExelwiLFxuICB3aWRlY2hlY2szOiBcIk0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsXFxuLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6XCIsXG4gIHdpZGVjaGVjazQ6IFwiTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCxcXG4tMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpcIixcbiAgLy8gVGhlIG5leHQgdGVuIHBhdGhzIHN1cHBvcnQgcmVhY3Rpb24gYXJyb3dzIGZyb20gdGhlIG1oY2hlbSBwYWNrYWdlLlxuICAvLyBBcnJvd3MgZm9yIFxcY2V7PC0tPn0gYXJlIG9mZnNldCBmcm9tIHhBeGlzIGJ5IDAuMjJleCwgcGVyIG1oY2hlbSBpbiBMYVRlWFxuICAvLyBiYXJhYm92ZWxlZnRhcnJvdyBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTAgaW4gZm9udCBLYVRlWCBNYWluXG4gIGJhcmFib3ZlbGVmdGFycm93OiBcIk00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDJcXG5jNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41XFxuYy0yLjMgMS43IC00LjIgNS44IC01LjUgMTIuNWMtMS4zIDQuNyAtMi43IDEwLjMgLTQgMTdjLTEyIDQ4LjcgLTM0LjggOTIgLTY4LjUgMTMwXFxucy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0N1xcbjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNlxcbnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxIC0zLjcgMjEgLTExXFxuYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6XFxuTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6XCIsXG4gIC8vIHJpZ2h0YXJyb3dhYm92ZWJhciBpcyBtb3N0bHkgZnJvbSBnbHlwaCBVKzIxOTIsIEthVGVYIE1haW5cbiAgcmlnaHRhcnJvd2Fib3ZlYmFyOiBcIk0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzJcXG4tMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAgMTEgOCAwXFxuMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzlcXG4tODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNVxcbi0xMTktNzUuNXMtNTguMy03NC44LTczLTExOS41Yy00LjctMTQtOC4zLTI3LjMtMTEtNDAtMS4zLTYuNy0zLjItMTAuOC01LjVcXG4tMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2N1xcbjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwelwiLFxuICAvLyBUaGUgc2hvcnQgbGVmdCBoYXJwb29uIGhhcyAwLjVlbSAoaS5lLiA1MDAgdW5pdHMpIGtlcm4gb24gdGhlIGxlZnQgZW5kLlxuICAvLyBSZWYgZnJvbSBtaGNoZW0uc3R5OiBcXHJsYXB7XFxyYWlzZWJveHstLjIyZXh9eyRcXGtlcm4wLjVlbVxuICBiYXJhYm92ZXNob3J0bGVmdGhhcnBvb246IFwiTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExXFxuYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN1xcbmMyLDAuNyw1LDEsOSwxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxXFxuYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MFxcbmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHpcXG5NMCAyODEgdi00MCBIMzk5OTA4IHY0MHogTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6XCIsXG4gIHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6IFwiTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwXFxuYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksXFxuLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNlxcbmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXpcXG5NMCAyNDEgdjQwIEgzOTk5MDggdi00MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQwelwiLFxuICBzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246IFwiTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMVxcbmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdjMiwwLjcsNSwxLDksXFxuMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LFxcbi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6XFxuTTkzIDQzNSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQwelwiLFxuICBzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOiBcIk01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMFxcbmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LFxcbi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDZcXG5jLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6XFxuTTUwMCAyNDEgdjQwIEgzOTk0MDggdi00MHogTTUwMCA0MzUgdjQwIEg0MDAwMDAgdi00MHpcIlxufTtcbnZhciB0YWxsRGVsaW0gPSBmdW5jdGlvbiB0YWxsRGVsaW0obGFiZWwsIG1pZEhlaWdodCkge1xuICBzd2l0Y2ggKGxhYmVsKSB7XG4gICAgY2FzZSBcImxicmFja1wiOlxuICAgICAgcmV0dXJuIFwiTTQwMyAxNzU5IFY4NCBINjY2IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgaDM0NyB2LTg0XFxuSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3NTkgaDg0elwiO1xuXG4gICAgY2FzZSBcInJicmFja1wiOlxuICAgICAgcmV0dXJuIFwiTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IEgwIHY4NCBIMzQ3elxcbk0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHYxNzU5IGg4NHpcIjtcblxuICAgIGNhc2UgXCJ2ZXJ0XCI6XG4gICAgICByZXR1cm4gXCJNMTQ1IDE1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTVcXG5jMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZcIiArIC1taWRIZWlnaHQgKyBcIiB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTVcXG5jLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjU4NSBoNDN6XCI7XG5cbiAgICBjYXNlIFwiZG91YmxldmVydFwiOlxuICAgICAgcmV0dXJuIFwiTTE0NSAxNSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1XFxuYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2XCIgKyAtbWlkSGVpZ2h0ICsgXCIgdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1XFxuYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZcIiArIG1pZEhlaWdodCArIFwiIHY1ODUgaDQzelxcbk0zNjcgMTUgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNVxcbmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdlwiICsgLW1pZEhlaWdodCArIFwiIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNVxcbmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNNDEwIDE1IEgzNjcgdjU4NSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NTg1IGg0M3pcIjtcblxuICAgIGNhc2UgXCJsZmxvb3JcIjpcbiAgICAgIHJldHVybiBcIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTcxNSBoMjYzIHY4NCBIMzE5elxcbk1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdlwiICsgbWlkSGVpZ2h0ICsgXCIgdjE3MTUgSDMxOXpcIjtcblxuICAgIGNhc2UgXCJyZmxvb3JcIjpcbiAgICAgIHJldHVybiBcIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTc5OSBIMCB2LTg0IEgzMTl6XFxuTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2MTcxNSBIMzE5elwiO1xuXG4gICAgY2FzZSBcImxjZWlsXCI6XG4gICAgICByZXR1cm4gXCJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcXG5NNDAzIDE3NTkgVjAgSDMxOSBWMTc1OSB2XCIgKyBtaWRIZWlnaHQgKyBcIiB2NjAyIGg4NHpcIjtcblxuICAgIGNhc2UgXCJyY2VpbFwiOlxuICAgICAgcmV0dXJuIFwiTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elxcbk0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZcIiArIG1pZEhlaWdodCArIFwiIHY2MDIgaDg0elwiO1xuXG4gICAgY2FzZSBcImxwYXJlblwiOlxuICAgICAgcmV0dXJuIFwiTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxXFxuYy01LjMsNS4zLC0xMC4zLDExLC0xNSwxN2MtMjQyLjcsMjk0LjcsLTM5NS4zLDY4MiwtNDU4LDExNjJjLTIxLjMsMTYzLjMsLTMzLjMsMzQ5LFxcbi0zNiw1NTcgbDAsXCIgKyAobWlkSGVpZ2h0ICsgODQpICsgXCJjMC4yLDYsMCwyNiwwLDYwYzIsMTU5LjMsMTAsMzEwLjcsMjQsNDU0YzUzLjMsNTI4LDIxMCxcXG45NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTlcXG5jMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSxcXG4tNTQ0LjcsLTExMi41LC04ODJjLTIsLTEwNCwtMywtMTY3LC0zLC0xODlcXG5sMCwtXCIgKyAobWlkSGVpZ2h0ICsgOTIpICsgXCJjMCwtMTYyLjcsNS43LC0zMTQsMTcsLTQ1NGMyMC43LC0yNzIsNjMuNywtNTEzLDEyOSwtNzIzYzY1LjMsXFxuLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4elwiO1xuXG4gICAgY2FzZSBcInJwYXJlblwiOlxuICAgICAgcmV0dXJuIFwiTTc2LDBjLTE2LjcsMCwtMjUsMywtMjUsOWMwLDIsMiw2LjMsNiwxM2MyMS4zLDI4LjcsNDIuMyw2MC4zLFxcbjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNVxcbmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxcIiArIChtaWRIZWlnaHQgKyA5KSArIFwiXFxuYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0XFxuYy01NS43LDE5NC43LC0xMzEuOCwzNzAuMywtMjI4LjUsNTI3Yy0yMC43LDM0LjcsLTQxLjcsNjYuMywtNjMsOTVjLTIsMy4zLC00LDcsLTYsMTFcXG5jMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xN1xcbmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4XFxubDAsLVwiICsgKG1pZEhlaWdodCArIDE0NCkgKyBcImMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LFxcbi00NzAsLTEyNjVjLTQuNywtNiwtOS43LC0xMS43LC0xNSwtMTdjLTAuNywtMC43LC02LjcsLTEsLTE4LC0xelwiO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFdlIHNob3VsZCBub3QgZXZlciBnZXQgaGVyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gc3RyZXRjaHkgZGVsaW1pdGVyLlwiKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGRvY3VtZW50IGZyYWdtZW50LCB3aGljaCBjb250YWlucyBlbGVtZW50cywgYnV0IHdoZW5cbiAqIHBsYWNlZCBpbnRvIHRoZSBET00gZG9lc24ndCBoYXZlIGFueSByZXByZXNlbnRhdGlvbiBpdHNlbGYuIEl0IG9ubHkgY29udGFpbnNcbiAqIGNoaWxkcmVuIGFuZCBkb2Vzbid0IGhhdmUgYW55IERPTSBub2RlIHByb3BlcnRpZXMuXG4gKi9cbmNsYXNzIERvY3VtZW50RnJhZ21lbnQge1xuICAvLyBIdG1sRG9tTm9kZVxuICAvLyBOZXZlciB1c2VkOyBuZWVkZWQgZm9yIHNhdGlzZnlpbmcgaW50ZXJmYWNlLlxuICBjb25zdHJ1Y3RvcihjaGlsZHJlbikge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5jbGFzc2VzID0gdm9pZCAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gdm9pZCAwO1xuICAgIHRoaXMuZGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgdGhpcy5kZXB0aCA9IDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IDA7XG4gICAgdGhpcy5zdHlsZSA9IHt9O1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuICAvKiogQ29udmVydCB0aGUgZnJhZ21lbnQgaW50byBhIG5vZGUuICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZyYWcuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYWc7XG4gIH1cbiAgLyoqIENvbnZlcnQgdGhlIGZyYWdtZW50IGludG8gSFRNTCBtYXJrdXAuICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCJcIjsgLy8gU2ltcGx5IGNvbmNhdGVuYXRlIHRoZSBtYXJrdXAgZm9yIHRoZSBjaGlsZHJlbiB0b2dldGhlci5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbWFya3VwICs9IHRoaXMuY2hpbGRyZW5baV0udG9NYXJrdXAoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LiBBcHBsaWVzIHRvXG4gICAqIE1hdGhEb21Ob2RlJ3Mgb25seS5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgc3ViY2xhc3MgZG9jdW1lbnRGcmFnbWVudCBzZXBhcmF0ZWx5IGZvclxuICAgIC8vIE1hdGhNTCwgYnV0IHBvbHlmaWxscyBmb3Igc3ViY2xhc3NpbmcgaXMgZXhwZW5zaXZlIHBlciBQUiAxNDY5LlxuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgd29ya3MgZm9yIENoaWxkVHlwZSA9IE1hdGhEb21Ob2RlLlxuICAgIHZhciB0b1RleHQgPSBjaGlsZCA9PiBjaGlsZC50b1RleHQoKTtcblxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLm1hcCh0b1RleHQpLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG4vLyBUaGlzIGZpbGUgaXMgR0VORVJBVEVEIGJ5IGJ1aWxkTWV0cmljcy5zaC4gRE8gTk9UIE1PRElGWS5cbnZhciBmb250TWV0cmljc0RhdGEgPSB7XG4gIFwiQU1TLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNjdcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiNjlcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiNzBcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiNzFcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNzNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiNzRcIjogWzAuMTY2NjcsIDAuNjg4ODksIDAsIDAsIDAuNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI3OVwiOiBbMC4xNjY2NywgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4MVwiOiBbMC4xNjY2NywgMC42ODg4OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMS4wXSxcbiAgICBcIjg4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg5XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkwXCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY1XCI6IFswLCAwLjY3NSwgMC4wMjUsIDAsIDAuNzVdLFxuICAgIFwiMTc0XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjk0NjY2XSxcbiAgICBcIjI0MFwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIyOTVcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiNzEwXCI6IFswLCAwLjgyNSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3MzJcIjogWzAsIDAuOSwgMCwgMCwgMi4zMzMzNF0sXG4gICAgXCI3NzBcIjogWzAsIDAuODI1LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjc3MVwiOiBbMCwgMC45LCAwLCAwLCAyLjMzMzM0XSxcbiAgICBcIjk4OVwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIxMDA4XCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjgyNDVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuMjc1XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ4N1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDk4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg1MDJcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODUwM1wiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4NTA0XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg1MTNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODU5MlwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNV0sXG4gICAgXCI4NTk0XCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg2MDJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwM1wiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjA2XCI6IFswLjAxMzU0LCAwLjUyMjM5LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwOFwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MTBcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODYxMVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4NjE5XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MjFcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjM4ODg5XSxcbiAgICBcIjg2MjJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODYyNFwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC41XSxcbiAgICBcIjg2MjVcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI4NjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAxLjBdLFxuICAgIFwiODYzMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MzRcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODYzNVwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NjM4XCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2MzlcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNDE2NjddLFxuICAgIFwiODY0MlwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI4NjQzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg2NDRcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjQ2XCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0N1wiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDhcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY0OVwiOiBbMC4xODA4LCAwLjY3NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTBcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODY1MVwiOiBbMC4wMTM1NCwgMC41MjIzOSwgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTJcIjogWzAuMDEzNTQsIDAuNTIyMzksIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUzXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY1NVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjY2XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2N1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NjlcIjogWy0wLjEzMzEzLCAwLjM3Nzg4LCAwLCAwLCAxLjBdLFxuICAgIFwiODY3MlwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODY3NFwiOiBbLTAuMDY0LCAwLjQzNywgMCwgMCwgMS4zMzRdLFxuICAgIFwiODcwNVwiOiBbMCwgMC44MjUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzA4XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40MjkxN10sXG4gICAgXCI4NzIyXCI6IFstMC4wMzU5OCwgMC40NjQwMiwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjRcIjogWzAuMDgxOTgsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzMzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczN1wiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM4XCI6IFswLjAzNTE3LCAwLjUyMjM5LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg3MzlcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuMjIyMjJdLFxuICAgIFwiODc0MFwiOiBbMC4yNTE0MiwgMC43NDExMSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjg3NDJcIjogWzAuMjUxNDIsIDAuNzQxMTEsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzU2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NTdcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc2NFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2NVwiOiBbLTAuMTMzMTMsIDAuMzc3ODgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc2OVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3MFwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3NFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc2XCI6IFstMC4wMTY4OCwgMC40ODMxMiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzc4XCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODJcIjogWzAuMDYwNjIsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4M1wiOiBbMC4wNjA2MiwgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4Nzg1XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3ODZcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4N1wiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzkwXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3OTFcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc5NlwiOiBbMC4wODE5OCwgMC45MTY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MDdcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwOFwiOiBbMC4yNTE0MiwgMC43NTcyNiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTJcIjogWzAuMjU1ODMsIDAuNzU1ODMsIDAsIDAsIDAuNV0sXG4gICAgXCI4ODE0XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTVcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxNlwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODE3XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MThcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgxOVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODIyXCI6IFswLjE4MDgsIDAuNjc1LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MjNcIjogWzAuMTgwOCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgyOFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI5XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzBcIjogWzAuMjI5NTgsIDAuNzI5NTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgzMVwiOiBbMC4yMjk1OCwgMC43Mjk1OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODMyXCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzNcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDJcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0M1wiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODQ3XCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NDhcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1OFwiOiBbMC4wODE5OCwgMC41ODE5OCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU5XCI6IFswLjA4MTk4LCAwLjU4MTk4LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NjFcIjogWzAuMDgxOTgsIDAuNTgxOTgsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2MlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2M1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NFwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg2NVwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg3MlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODczXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjg4NzRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiODg3NlwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4ODc3XCI6IFswLCAwLjY4ODg5LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NzhcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODg3OVwiOiBbMCwgMC42ODg4OSwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4ODgyXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODNcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg4NFwiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODg1XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4ODhcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5MFwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODkxXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4OTJcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODkwMVwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4OTAzXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDVcIjogWzAuMDgxNjcsIDAuNTgxNjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwNlwiOiBbMC4wODE2NywgMC41ODE2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTA3XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MDhcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkwOVwiOiBbLTAuMDM1OTgsIDAuNDY0MDIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxMFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43NjA0Ml0sXG4gICAgXCI4OTExXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjc2MDQyXSxcbiAgICBcIjg5MTJcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkxM1wiOiBbMC4wMzUxNywgMC41NDk4NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE0XCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5MTVcIjogWzAsIDAuNTQ5ODYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODkxNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OTE4XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTE5XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIwXCI6IFswLjAzNTE3LCAwLjU0OTg2LCAwLCAwLCAxLjMzMzM0XSxcbiAgICBcIjg5MjFcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDEuMzMzMzRdLFxuICAgIFwiODkyMlwiOiBbMC4zODU2OSwgMC44ODU2OSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTIzXCI6IFswLjM4NTY5LCAwLjg4NTY5LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjZcIjogWzAuMTM2NjcsIDAuNjM2NjcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkyN1wiOiBbMC4xMzY2NywgMC42MzY2NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTI4XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MjlcIjogWzAuMzAyNzQsIDAuNzkzODMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzNFwiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM1XCI6IFswLjIzMjIyLCAwLjc0MTExLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzZcIjogWzAuMjMyMjIsIDAuNzQxMTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODkzN1wiOiBbMC4yMzIyMiwgMC43NDExMSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTM4XCI6IFswLjIwNTc2LCAwLjcwNTc2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5MzlcIjogWzAuMjA1NzYsIDAuNzA1NzYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk0MFwiOiBbMC4zMDI3NCwgMC43OTM4MywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4OTQxXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg5OTRcIjogWzAuMTk0NDQsIDAuNjkyMjQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODk5NVwiOiBbMC4xOTQ0NCwgMC42OTIyNCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5NDE2XCI6IFswLjE1NTU5LCAwLjY5MjI0LCAwLCAwLCAwLjkwMjIyXSxcbiAgICBcIjk0ODRcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NDg4XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjVdLFxuICAgIFwiOTQ5MlwiOiBbMCwgMC4zNzc4OCwgMCwgMCwgMC41XSxcbiAgICBcIjk0OTZcIjogWzAsIDAuMzc3ODgsIDAsIDAsIDAuNV0sXG4gICAgXCI5NTg1XCI6IFswLjE5NDQ0LCAwLjY4ODg5LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk1ODZcIjogWzAuMTk0NDQsIDAuNzQxMTEsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTYzMlwiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTYzM1wiOiBbMCwgMC42NzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY1MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjUxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NTRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY2MFwiOiBbMCwgMC41NDk4NiwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5NjYxXCI6IFswLCAwLjU0OTg2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjk2NjRcIjogWzAuMDM1MTcsIDAuNTQ5ODYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTY3NFwiOiBbMC4xMTExMSwgMC42OTIyNCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5NzMzXCI6IFswLjE5NDQ0LCAwLjY5MjI0LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjEwMDAzXCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwMDE2XCI6IFswLCAwLjY5MjI0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzMxXCI6IFswLjExMTExLCAwLjY5MjI0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwODQ2XCI6IFswLjE5NDQ0LCAwLjc1NTgzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjEwODc3XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODc4XCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg1XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg2XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODg5XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkwXCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkxXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwODkyXCI6IFswLjQ4MjU2LCAwLjk4MjU2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAxXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTAyXCI6IFswLjEzNjY3LCAwLjYzNjY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTMzXCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM0XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM1XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM2XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM3XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTM4XCI6IFswLjI2MTY3LCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTQ5XCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTUwXCI6IFswLjI1NTgzLCAwLjc1NTgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU1XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTU2XCI6IFswLjI4NDgxLCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUwXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjIyMjIyXSxcbiAgICBcIjU3MzUxXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjU3MzUyXCI6IFswLjA4MTY3LCAwLjU4MTY3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzUzXCI6IFswLCAwLjQzMDU2LCAwLjA0MDI4LCAwLCAwLjY2NjY3XSxcbiAgICBcIjU3MzU2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU4XCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzU5XCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYwXCI6IFswLjMwMjc0LCAwLjc5MzgzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzYxXCI6IFswLjQxOTUxLCAwLjkxOTUxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY2XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY3XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY4XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzY5XCI6IFswLjI1MTQyLCAwLjc1NzI2LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcwXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3MzcxXCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XVxuICB9LFxuICBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTk0NDUsIDAuNzk4NDddLFxuICAgIFwiNjZcIjogWzAsIDAuNjgzMzMsIDAuMDMwNDEsIDAuMTM4ODksIDAuNjU2ODFdLFxuICAgIFwiNjdcIjogWzAsIDAuNjgzMzMsIDAuMDU4MzQsIDAuMTM4ODksIDAuNTI2NTNdLFxuICAgIFwiNjhcIjogWzAsIDAuNjgzMzMsIDAuMDI3NzgsIDAuMDgzMzQsIDAuNzcxMzldLFxuICAgIFwiNjlcIjogWzAsIDAuNjgzMzMsIDAuMDg5NDQsIDAuMTExMTEsIDAuNTI3NzhdLFxuICAgIFwiNzBcIjogWzAsIDAuNjgzMzMsIDAuMDk5MzEsIDAuMTExMTEsIDAuNzE4NzVdLFxuICAgIFwiNzFcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMDU5MywgMC4xMTExMSwgMC41OTQ4N10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4wMDk2NSwgMC4xMTExMSwgMC44NDQ1Ml0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4wNzM4MiwgMCwgMC41NDQ1Ml0sXG4gICAgXCI3NFwiOiBbMC4wOTcyMiwgMC42ODMzMywgMC4xODQ3MiwgMC4xNjY2NywgMC42Nzc3OF0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMC4wMTQ0NSwgMC4wNTU1NiwgMC43NjE5NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC42ODk3Ml0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMS4yMDA5XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjE0NzM2LCAwLjA4MzM0LCAwLjgyMDQ5XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjExMTExLCAwLjc5NjExXSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjY5NTU2XSxcbiAgICBcIjgxXCI6IFswLjA5NzIyLCAwLjY4MzMzLCAwLCAwLjExMTExLCAwLjgxNjY3XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjg0NzVdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAuMDc1LCAwLjEzODg5LCAwLjYwNTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4MzMzLCAwLjI1NDE3LCAwLCAwLjU0NDY0XSxcbiAgICBcIjg1XCI6IFswLCAwLjY4MzMzLCAwLjA5OTMxLCAwLjA4MzM0LCAwLjYyNTgzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLCAwLjYxMjc4XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4MzMzLCAwLjA4MjIyLCAwLjA4MzM0LCAwLjk4Nzc4XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4MzMzLCAwLjE0NjQzLCAwLjEzODg5LCAwLjcxMzNdLFxuICAgIFwiODlcIjogWzAuMDk3MjIsIDAuNjgzMzMsIDAuMDgyMjIsIDAuMDgzMzQsIDAuNjY4MzRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDc5NDQsIDAuMTM4ODksIDAuNzI0NzNdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XVxuICB9LFxuICBcIkZyYWt0dXItUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yOTU3NF0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43Mzc4Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTIwMV0sXG4gICAgXCI0MFwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4zODg2NV0sXG4gICAgXCI0MVwiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC4zODg2NV0sXG4gICAgXCI0MlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0M1wiOiBbMC4wODMxOSwgMC41ODI4MywgMCwgMCwgMC43NTYyM10sXG4gICAgXCI0NFwiOiBbMCwgMC4xMDgwMywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0NVwiOiBbMC4wODMxOSwgMC41ODI4MywgMCwgMCwgMC43NTYyM10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMDgwMywgMCwgMCwgMC4yNzc2NF0sXG4gICAgXCI0N1wiOiBbMC4yNDk4MiwgMC43NDk0NywgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI0OFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI0OVwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1MlwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1M1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1N1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDE4MV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC4yMTYwNl0sXG4gICAgXCI1OVwiOiBbMC4xMjYwNCwgMC40NzUzNCwgMCwgMCwgMC4yMTYwNl0sXG4gICAgXCI2MVwiOiBbLTAuMTMwOTksIDAuMzY4NjYsIDAsIDAsIDAuNzU2MjNdLFxuICAgIFwiNjNcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMzYyNDVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuNzE3Nl0sXG4gICAgXCI2NlwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44ODM5N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42MTI1NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC44MzE1OF0sXG4gICAgXCI2OVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC42NjI3OF0sXG4gICAgXCI3MFwiOiBbMC4xMjYwNCwgMC42OTE0MSwgMCwgMCwgMC42MTExOV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC43ODUzOV0sXG4gICAgXCI3MlwiOiBbMC4wNjMwMiwgMC42OTE0MSwgMCwgMCwgMC43MjAzXSxcbiAgICBcIjczXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjU1NDQ4XSxcbiAgICBcIjc0XCI6IFswLjEyNjA0LCAwLjY5MTQxLCAwLCAwLCAwLjU1MjMxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2ODQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2NjAyXSxcbiAgICBcIjc3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAxLjA0OTUzXSxcbiAgICBcIjc4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgzMjEyXSxcbiAgICBcIjc5XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyNjk5XSxcbiAgICBcIjgwXCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjgyNzUzXSxcbiAgICBcIjgxXCI6IFswLjAzNzgxLCAwLjY5MTQxLCAwLCAwLCAwLjgyNjk5XSxcbiAgICBcIjgyXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyODA3XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgyODYxXSxcbiAgICBcIjg0XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY2ODk5XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjY0NTc2XSxcbiAgICBcIjg2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjgzMTMxXSxcbiAgICBcIjg3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAxLjA0NjAyXSxcbiAgICBcIjg4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjcxOTIyXSxcbiAgICBcIjg5XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjgzMjkzXSxcbiAgICBcIjkwXCI6IFswLjEyNjA0LCAwLjY5MTQxLCAwLCAwLCAwLjYwMjAxXSxcbiAgICBcIjkxXCI6IFswLjI0OTgyLCAwLjc0OTQ3LCAwLCAwLCAwLjI3NzY0XSxcbiAgICBcIjkzXCI6IFswLjI0OTgyLCAwLjc0OTQ3LCAwLCAwLCAwLjI3NzY0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjQ5OTY1XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDQ2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjUxMzE1XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjM4OTQ2XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTg1N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNDAwNTNdLFxuICAgIFwiMTAyXCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyNjI2XSxcbiAgICBcIjEwM1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC41MDM3XSxcbiAgICBcIjEwNFwiOiBbMC4xODkwNiwgMC42OTE0MSwgMCwgMCwgMC41MjEyNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjc4OTldLFxuICAgIFwiMTA2XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjI4MDg4XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4zODk0Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjc5NTNdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjc2Njc2XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NzUzNCwgMCwgMCwgMC41MjY2Nl0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNDg4ODVdLFxuICAgIFwiMTEyXCI6IFswLjE4OTA2LCAwLjUyMzk2LCAwLCAwLCAwLjUwMDQ2XSxcbiAgICBcIjExM1wiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC40ODkxMl0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuMzg5MTldLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjQ0MjY2XSxcbiAgICBcIjExNlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC4zMzMwMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDc1MzQsIDAsIDAsIDAuNTE3Ml0sXG4gICAgXCIxMThcIjogWzAsIDAuNTIzOTYsIDAsIDAsIDAuNTExOF0sXG4gICAgXCIxMTlcIjogWzAsIDAuNTIzOTYsIDAsIDAsIDAuNzczNTFdLFxuICAgIFwiMTIwXCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjM4ODY1XSxcbiAgICBcIjEyMVwiOiBbMC4xODkwNiwgMC40NzUzNCwgMCwgMCwgMC40OTg4NF0sXG4gICAgXCIxMjJcIjogWzAuMTg5MDYsIDAuNDc1MzQsIDAsIDAsIDAuMzkwNTRdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjkxNDEsIDAsIDAsIDAuMjE0NzFdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTE0MSwgMCwgMCwgMC4yMTQ3MV0sXG4gICAgXCI1ODExMlwiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTc0OV0sXG4gICAgXCI1ODExM1wiOiBbMCwgMC42MjExOSwgMCwgMCwgMC40OTgzXSxcbiAgICBcIjU4MTE0XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMzMzI4XSxcbiAgICBcIjU4MTE1XCI6IFswLjE4OTA2LCAwLjY5MTQxLCAwLCAwLCAwLjMyOTIzXSxcbiAgICBcIjU4MTE2XCI6IFswLjE4OTA2LCAwLjQ3NTM0LCAwLCAwLCAwLjUwMzQzXSxcbiAgICBcIjU4MTE3XCI6IFswLCAwLjY5MTQxLCAwLCAwLCAwLjMzMzAxXSxcbiAgICBcIjU4MTE4XCI6IFswLCAwLjYyMTE5LCAwLCAwLCAwLjMzNDA5XSxcbiAgICBcIjU4MTE5XCI6IFswLCAwLjQ3NTM0LCAwLCAwLCAwLjUwMDczXVxuICB9LFxuICBcIk1haW4tQm9sZFwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42MDI3OF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjQzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjM4MzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjE1NTU2LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNTlcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiNjBcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNjFcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYyXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MzA1XSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg2OTQ0XSxcbiAgICBcIjY2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgxODA1XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg4MTk0XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc1NTU1XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjcyMzYxXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjkwNDE2XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNDM2MTFdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNTk0NDRdLFxuICAgIFwiNzVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTAxMzhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNjkxNjZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDEuMDkxNjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOV0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43ODYxMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44NjM4OF0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjhdLFxuICAgIFwiODVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODg0NzJdLFxuICAgIFwiODZcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDAuODY5NDRdLFxuICAgIFwiODdcIjogWzAsIDAuNjg2MTEsIDAuMDE1OTcsIDAsIDEuMTg4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiODlcIjogWzAsIDAuNjg2MTEsIDAuMDI4NzUsIDAsIDAuODY5NDRdLFxuICAgIFwiOTBcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiOTJcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMzQ0NCwgMC4wMzE5NCwgMCwgMC41NzVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTU5MDJdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MjcwOF0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMTA5MDMsIDAsIDAuMzUxMzldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjU3NV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zNTEzOV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC45NTgzM10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTExXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjYwNjk0XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NzM2MV0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDUzNjFdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYzNDkyLCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNTk3LCAwLCAwLjgzMDU1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MDY5NF0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDE1OTcsIDAsIDAuNjA2OTRdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjEyM1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjM0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg2ODUzXSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiMTcyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44Njk0NF0sXG4gICAgXCIxNzdcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMS4wNDE2Nl0sXG4gICAgXCIyMTVcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczNDcyLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjIyM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41OTcyMl0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiMjQ3XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41NDE2NywgMCwgMCwgMC41NzVdLFxuICAgIFwiMzA1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMS4xNjk0NF0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjM1MTM5XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTk2MTEsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjcyOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI3MzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNzMyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC42OTE2Nl0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDU1NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODMwNTVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MzA1NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAwLjU3NV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjAzMTk0LCAwLCAxLjE0OTk5XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMTk0NF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYwMjc4XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjAyNzhdLFxuICAgIFwiODIyNFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4MjI1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuMzQ0NDRdLFxuICAgIFwiODQwN1wiOiBbMCwgMC43MjQ0NCwgMC4xNTQ4NiwgMCwgMC41NzVdLFxuICAgIFwiODQ2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Njc1OV0sXG4gICAgXCI4NDY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjg0NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDczNjFdLFxuICAgIFwiODQ3MlwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC43NDAyN10sXG4gICAgXCI4NDc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMDU1XSxcbiAgICBcIjg1MDFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODU5MlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5M1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5NFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5NVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5NlwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODU5N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODU5OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NTk5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2MDBcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODYwMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjM2XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjM3XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjQwXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjQxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU2XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4NjU3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg2NThcIjogWy0wLjEwODg5LCAwLjM5MTExLCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg2NTlcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzddLFxuICAgIFwiODY2MFwiOiBbLTAuMTA4ODksIDAuMzkxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODY2MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4NzA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg3MDZcIjogWzAsIDAuNjk0NDQsIDAuMDYzODksIDAsIDAuNjI4NDddLFxuICAgIFwiODcwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4NzA5XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzExXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjk1ODMzXSxcbiAgICBcIjg3MTJcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODcxNVwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzIyXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MjNcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODcyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODcyN1wiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3MjhcIjogWy0wLjAyNjM5LCAwLjQ3MzYxLCAwLCAwLCAwLjU3NV0sXG4gICAgXCI4NzI5XCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODczMFwiOiBbMC4xOCwgMC44MiwgMCwgMCwgMC45NTgzM10sXG4gICAgXCI4NzMzXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3MzRcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODczNlwiOiBbMCwgMC42OTIyNCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NzM5XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg3NDFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg3NDNcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0NFwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4NzQ1XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjg3NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODc0N1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMjc3OCwgMCwgMC41Njg3NV0sXG4gICAgXCI4NzY0XCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4NzY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjMxOTQ0XSxcbiAgICBcIjg3NzFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODc3M1wiOiBbMC4wMjcsIDAuNjM4LCAwLCAwLCAwLjg5NF0sXG4gICAgXCI4Nzc2XCI6IFswLjAyNDQ0LCAwLjUyNDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg3ODFcIjogWzAuMDAyMjIsIDAuNTAyMjIsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgwMVwiOiBbMC4wMDIyMiwgMC41MDIyMiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODA0XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MDVcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgxMFwiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI4ODExXCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAxLjE0OTk5XSxcbiAgICBcIjg4MjZcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgyN1wiOiBbMC4wODU1NiwgMC41ODU1NiwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM0XCI6IFswLjA4NTU2LCAwLjU4NTU2LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4MzVcIjogWzAuMDg1NTYsIDAuNTg1NTYsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODgzOFwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODM5XCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NDZcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg0OVwiOiBbMC4xOTY2NywgMC42OTY2NywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODUwXCI6IFswLjE5NjY3LCAwLjY5NjY3LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTFcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNzY2NjZdLFxuICAgIFwiODg1MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC43NjY2Nl0sXG4gICAgXCI4ODUzXCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTRcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg1NVwiOiBbMC4xMzMzMywgMC42MzMzMywgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4ODU2XCI6IFswLjEzMzMzLCAwLjYzMzMzLCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjg4NTdcIjogWzAuMTMzMzMsIDAuNjMzMzMsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg2NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDI3N10sXG4gICAgXCI4ODY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwMjc3XSxcbiAgICBcIjg4NjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiODg2OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI4OTAwXCI6IFstMC4wMjYzOSwgMC40NzM2MSwgMCwgMCwgMC41NzVdLFxuICAgIFwiODkwMVwiOiBbLTAuMDI2MzksIDAuNDczNjEsIDAsIDAsIDAuMzE5NDRdLFxuICAgIFwiODkwMlwiOiBbLTAuMDI3NzgsIDAuNDcyMjIsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjg5NjhcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk2OVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI4OTcwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjUxMTExXSxcbiAgICBcIjg5NzFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNTExMTFdLFxuICAgIFwiODk5NFwiOiBbLTAuMTM4ODksIDAuMzYxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiODk5NVwiOiBbLTAuMTM4ODksIDAuMzYxMTEsIDAsIDAsIDEuMTQ5OTldLFxuICAgIFwiOTY1MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wMjIyMl0sXG4gICAgXCI5NjU3XCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTY2MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wMjIyMl0sXG4gICAgXCI5NjY3XCI6IFstMC4wMjc3OCwgMC40NzIyMiwgMCwgMCwgMC41NzVdLFxuICAgIFwiOTcxMVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4xNDk5OV0sXG4gICAgXCI5ODI0XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MjVcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiOTgyNlwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC44OTQ0NF0sXG4gICAgXCI5ODI3XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjg5NDQ0XSxcbiAgICBcIjk4MzdcIjogWzAsIDAuNzUsIDAsIDAsIDAuNDQ3MjJdLFxuICAgIFwiOTgzOFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDcyMl0sXG4gICAgXCI5ODM5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwMjE2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NzIyXSxcbiAgICBcIjEwODE1XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjldLFxuICAgIFwiMTA5MjdcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiMTA5MjhcIjogWzAuMTk2NjcsIDAuNjk2NjcsIDAsIDAsIDAuODk0NDRdLFxuICAgIFwiNTczNzZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDBdXG4gIH0sXG4gIFwiTWFpbi1Cb2xkSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjExNDE3LCAwLCAwLjM4NjExXSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjA3OTM5LCAwLCAwLjYyMDU1XSxcbiAgICBcIjM1XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA2ODMzLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLjEyODYxLCAwLCAwLjk0NDQ0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLjA4NTI4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLjEyOTQ1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLjE1ODA2LCAwLCAwLjQ3MzMzXSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLjAzMzA2LCAwLCAwLjQ3MzMzXSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLjE0MzMzLCAwLCAwLjU5MTExXSxcbiAgICBcIjQzXCI6IFswLjEwMzMzLCAwLjYwMzMzLCAwLjAzMzA2LCAwLCAwLjg4NTU1XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjE0NzIyLCAwLCAwLCAwLjM1NTU1XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLjAyNjExLCAwLCAwLjQxNDQ0XSxcbiAgICBcIjQ2XCI6IFswLCAwLjE0NzIyLCAwLCAwLCAwLjM1NTU1XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLjE1ODA2LCAwLCAwLjU5MTExXSxcbiAgICBcIjQ4XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjQ5XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUxXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUyXCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU0XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU1XCI6IFswLjE5NDQ0LCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU3XCI6IFswLCAwLjY0NDQ0LCAwLjEzMTY3LCAwLCAwLjU5MTExXSxcbiAgICBcIjU4XCI6IFswLCAwLjQ0NDQ0LCAwLjA2Njk1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjU5XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA2Njk1LCAwLCAwLjM1NTU1XSxcbiAgICBcIjYxXCI6IFstMC4xMDg4OSwgMC4zOTExMSwgMC4wNjgzMywgMCwgMC44ODU1NV0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wOTIwOCwgMCwgMC44ODU1NV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44NjU1NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODYxMSwgMC4wOTkyLCAwLCAwLjgxNjY2XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjgyNjY2XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4NjExLCAwLjA5MDYyLCAwLCAwLjg3NTU1XSxcbiAgICBcIjY5XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAwLjc1NjY2XSxcbiAgICBcIjcwXCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjcyNzIyXSxcbiAgICBcIjcxXCI6IFswLCAwLjY4NjExLCAwLjA3MzQ3LCAwLCAwLjg5NTI3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiNzNcIjogWzAsIDAuNjg2MTEsIDAuMTU2ODEsIDAsIDAuNDcxNjZdLFxuICAgIFwiNzRcIjogWzAsIDAuNjg2MTEsIDAuMTQ1LCAwLCAwLjYxMDU1XSxcbiAgICBcIjc1XCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjg5NDk5XSxcbiAgICBcIjc2XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjY5Nzc3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAxLjA3Mjc3XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg5NjFdLFxuICAgIFwiNzlcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODU0OTldLFxuICAgIFwiODBcIjogWzAsIDAuNjg2MTEsIDAuMDk5MiwgMCwgMC43ODcyMV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMC4wOTA2MiwgMCwgMC44NTQ5OV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMjU1OSwgMCwgMC44NTk0NF0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4xMTI2NCwgMCwgMC42NDk5OV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xMjkwMywgMCwgMC43OTYxXSxcbiAgICBcIjg1XCI6IFswLCAwLjY4NjExLCAwLjE3MjA4LCAwLCAwLjg4MDgzXSxcbiAgICBcIjg2XCI6IFswLCAwLjY4NjExLCAwLjE4NjI1LCAwLCAwLjg2NTU1XSxcbiAgICBcIjg3XCI6IFswLCAwLjY4NjExLCAwLjE4NjI1LCAwLCAxLjE1OTk5XSxcbiAgICBcIjg4XCI6IFswLCAwLjY4NjExLCAwLjE1NjgxLCAwLCAwLjg2NTU1XSxcbiAgICBcIjg5XCI6IFswLCAwLjY4NjExLCAwLjE5ODAzLCAwLCAwLjg2NTU1XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4NjExLCAwLjE0MjA4LCAwLCAwLjcwODg4XSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE4NzUsIDAsIDAuMzU2MTFdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAuMDk5NzIsIDAsIDAuMzU2MTFdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAuMDY3MDksIDAsIDAuNTkxMTFdLFxuICAgIFwiOTVcIjogWzAuMzEsIDAuMTM0NDQsIDAuMDk4MTEsIDAsIDAuNTkxMTFdLFxuICAgIFwiOTdcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuNTkxMTFdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAuMDc4NjEsIDAsIDAuNTMyMjJdLFxuICAgIFwiOTlcIjogWzAsIDAuNDQ0NDQsIDAuMDUyMjIsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLjEwODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTAyXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjIxNzc4LCAwLCAwLjRdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwNSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAuMDk0MjYsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLjExMzg3LCAwLCAwLjM1NTU1XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42OTMyNiwgMC4xNjcyLCAwLCAwLjM1NTU1XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4xMTExMSwgMCwgMC41MzIyMl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMTA4NjEsIDAsIDAuMjk2NjZdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLjA5NDI2LCAwLCAwLjk0NDQ0XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC42NDk5OV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDc4NjEsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA3ODYxLCAwLCAwLjU5MTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDUsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjUwMTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMC4wODE2NywgMCwgMC40ODY5NF0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAuMDk2MzksIDAsIDAuMzg1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMC4wOTQyNiwgMCwgMC42MjA1NV0sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMTExMTEsIDAsIDAuNTMyMjJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjExMTExLCAwLCAwLjc2Nzc3XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMC4xMjU4MywgMCwgMC41NjA1NV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMTA1LCAwLCAwLjU2MTY2XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMC4xMzg4OSwgMCwgMC40OTA1NV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzQ0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MywgMCwgMC41OTExMV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTQ4ODhdLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjUzMjIyXSxcbiAgICBcIjE5OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQzMSwgMCwgMS4wMjI3N10sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzM0NzIsIDAuMDkwNjIsIDAsIDAuODg1NTVdLFxuICAgIFwiMjIzXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA5NzM2LCAwLCAwLjY2NV0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDQ0NDQsIDAuMDg1LCAwLCAwLjgyNjY2XSxcbiAgICBcIjI0OFwiOiBbMC4wOTcyMiwgMC41NDE2NywgMC4wOTQ1OCwgMCwgMC41OTExMV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDk0MjYsIDAsIDAuMzU1NTVdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4NjExLCAwLjExNDMxLCAwLCAxLjE0MDU0XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40NDQ0NCwgMC4wODUsIDAsIDAuODI2NjZdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0NjExLCAwLCAwLjM4NV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNjk0NDQsIDAuMDY3MDksIDAsIDAuNTkxMTFdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4MjcxLCAwLCAwLjU5MTExXSxcbiAgICBcIjcxM1wiOiBbMCwgMC41OTQ0NCwgMC4xMDQ0NCwgMCwgMC41OTExMV0sXG4gICAgXCI3MTRcIjogWzAsIDAuNjk0NDQsIDAuMDg1MjgsIDAsIDAuNTkxMTFdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5MTExXSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMC4xMDMzMywgMCwgMC41OTExMV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjk0ODg4XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMC4xMTQ3MiwgMCwgMC41OTExMV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMTE0NzIsIDAsIDAuNTkxMTFdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4NjExLCAwLjEyOTAzLCAwLCAwLjY5Nzc3XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC45NDQ0NF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjg2MTEsIDAuMDkwNjIsIDAsIDAuODg1NTVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjgwNjY2XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODYxMSwgMC4xNTA5MiwgMCwgMC43Njc3N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjg2MTEsIDAuMTcyMDgsIDAsIDAuODk2MV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjg2MTEsIDAuMTE0MzEsIDAsIDAuODI2NjZdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4NjExLCAwLjEwNzc4LCAwLCAwLjg4NTU1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODYxMSwgMC4wNTYzMiwgMCwgMC44MjY2Nl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjg2MTEsIDAuMTA3NzgsIDAsIDAuODg1NTVdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4NjExLCAwLjA5OTIsIDAsIDAuODI2NjZdLFxuICAgIFwiODIxMVwiOiBbMCwgMC40NDQ0NCwgMC4wOTgxMSwgMCwgMC41OTExMV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA5ODExLCAwLCAxLjE4MjIxXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAuMTI5NDUsIDAsIDAuMzU1NTVdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMC4xMjk0NSwgMCwgMC4zNTU1NV0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLjE2NzcyLCAwLCAwLjYyMDU1XSxcbiAgICBcIjgyMjFcIjogWzAsIDAuNjk0NDQsIDAuMDc5MzksIDAsIDAuNjIwNTVdXG4gIH0sXG4gIFwiTWFpbi1JdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAuMDY5NjEsIDAsIDAuNTE0NDRdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDY2MTYsIDAsIDAuODE3NzddLFxuICAgIFwiMzdcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTM2MzksIDAsIDAuODE3NzddLFxuICAgIFwiMzhcIjogWzAsIDAuNjk0NDQsIDAuMDk2OTQsIDAsIDAuNzY2NjZdLFxuICAgIFwiMzlcIjogWzAsIDAuNjk0NDQsIDAuMTI0MTcsIDAsIDAuMzA2NjddLFxuICAgIFwiNDBcIjogWzAuMjUsIDAuNzUsIDAuMTYxOTQsIDAsIDAuNDA4ODldLFxuICAgIFwiNDFcIjogWzAuMjUsIDAuNzUsIDAuMDM2OTQsIDAsIDAuNDA4ODldLFxuICAgIFwiNDJcIjogWzAsIDAuNzUsIDAuMTQ5MTcsIDAsIDAuNTExMTFdLFxuICAgIFwiNDNcIjogWzAuMDU2NjcsIDAuNTYxNjcsIDAuMDM2OTQsIDAsIDAuNzY2NjZdLFxuICAgIFwiNDRcIjogWzAuMTk0NDQsIDAuMTA1NTYsIDAsIDAsIDAuMzA2NjddLFxuICAgIFwiNDVcIjogWzAsIDAuNDMwNTYsIDAuMDI4MjYsIDAsIDAuMzU3NzhdLFxuICAgIFwiNDZcIjogWzAsIDAuMTA1NTYsIDAsIDAsIDAuMzA2NjddLFxuICAgIFwiNDdcIjogWzAuMjUsIDAuNzUsIDAuMTYxOTQsIDAsIDAuNTExMTFdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNDlcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTBcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTNcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTZcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAuMTM1NTYsIDAsIDAuNTExMTFdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAuMDU4MiwgMCwgMC4zMDY2N10sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNTgyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjYxXCI6IFstMC4xMzMxMywgMC4zNjY4NywgMC4wNjYxNiwgMCwgMC43NjY2Nl0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMjI1LCAwLCAwLjUxMTExXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLjA5NTk3LCAwLCAwLjc2NjY2XSxcbiAgICBcIjY1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc0MzMzXSxcbiAgICBcIjY2XCI6IFswLCAwLjY4MzMzLCAwLjEwMjU3LCAwLCAwLjcwMzg5XSxcbiAgICBcIjY3XCI6IFswLCAwLjY4MzMzLCAwLjE0NTI4LCAwLCAwLjcxNTU1XSxcbiAgICBcIjY4XCI6IFswLCAwLjY4MzMzLCAwLjA5NDAzLCAwLCAwLjc1NV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC42NzgzM10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMC4xMzMwNSwgMCwgMC42NTI3N10sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMC4wODcyMiwgMCwgMC43NzM2MV0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMC4xNjM4OSwgMCwgMC43NDMzM10sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMC4xNTgwNiwgMCwgMC4zODU1NV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMC4xNDAyOCwgMCwgMC41MjVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNzY4ODhdLFxuICAgIFwiNzZcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI3MjJdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuODk2NjZdLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAuMTAyNTcsIDAsIDAuNjc4MzNdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAuMDM4NjgsIDAsIDAuNzI5NDRdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAuMTE5NzIsIDAsIDAuNTYyMjJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTMzMDUsIDAsIDAuNzE1NTVdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMTgzNjEsIDAsIDAuNzQzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTgzNjEsIDAsIDAuOTk4ODhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMTU4MDYsIDAsIDAuNzQzMzNdLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMTkzODMsIDAsIDAuNzQzMzNdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMTQ1MjgsIDAsIDAuNjEzMzNdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAuMTg3NSwgMCwgMC4zMDY2N10sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMC4xMDUyOCwgMCwgMC4zMDY2N10sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMC4wNjY0NiwgMCwgMC41MTExMV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMjA1NiwgMC4wOTIwOCwgMCwgMC41MTExMV0sXG4gICAgXCI5N1wiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC41MTExMV0sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMC4wNjMxMiwgMCwgMC40Nl0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMC4wNTY1MywgMCwgMC40Nl0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAuMTAzMzMsIDAsIDAuNTExMTFdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQzMDU2LCAwLjA3NTE0LCAwLCAwLjQ2XSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4yMTE5NCwgMCwgMC4zMDY2N10sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDZdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLjA3NjcxLCAwLCAwLjUxMTExXSxcbiAgICBcIjEwNVwiOiBbMCwgMC42NTUzNiwgMC4xMDE5LCAwLCAwLjMwNjY3XSxcbiAgICBcIjEwNlwiOiBbMC4xOTQ0NCwgMC42NTUzNiwgMC4xNDQ2NywgMCwgMC4zMDY2N10sXG4gICAgXCIxMDdcIjogWzAsIDAuNjk0NDQsIDAuMTA3NjQsIDAsIDAuNDZdLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjEwMzMzLCAwLCAwLjI1NTU1XSxcbiAgICBcIjEwOVwiOiBbMCwgMC40MzA1NiwgMC4wNzY3MSwgMCwgMC44MTc3N10sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAuMDc2NzEsIDAsIDAuNTYyMjJdLFxuICAgIFwiMTExXCI6IFswLCAwLjQzMDU2LCAwLjA2MzEyLCAwLCAwLjUxMTExXSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wNjMxMiwgMCwgMC41MTExMV0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDg4NDcsIDAsIDAuNDZdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQzMDU2LCAwLjEwNzY0LCAwLCAwLjQyMTY2XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMC4wODIwOCwgMCwgMC40MDg4OV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjE1MDgsIDAuMDk0ODYsIDAsIDAuMzMyMjJdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQzMDU2LCAwLjA3NjcxLCAwLCAwLjUzNjY2XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMC4xMDc2NCwgMCwgMC40Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAuMTA3NjQsIDAsIDAuNjY0NDRdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQzMDU2LCAwLjEyMDQyLCAwLCAwLjQ2Mzg5XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wODg0NywgMCwgMC40ODU1NV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAuMTIyOTIsIDAsIDAuNDA4ODldLFxuICAgIFwiMTI2XCI6IFswLjM1LCAwLjMxNzg2LCAwLjExNTg1LCAwLCAwLjUxMTExXSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjY3ODYsIDAuMTA0NzQsIDAsIDAuNTExMTFdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMTI5XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40Nl0sXG4gICAgXCIxOThcIjogWzAsIDAuNjgzMzMsIDAuMTIwMjgsIDAsIDAuODgyNzddLFxuICAgIFwiMjE2XCI6IFswLjA0ODYxLCAwLjczMTk0LCAwLjA5NDAzLCAwLCAwLjc2NjY2XSxcbiAgICBcIjIyM1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMDUxNCwgMCwgMC41MzY2Nl0sXG4gICAgXCIyMzBcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiMjQ4XCI6IFswLjA5NzIyLCAwLjUyNzc4LCAwLjA5MTk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjMzOFwiOiBbMCwgMC42ODMzMywgMC4xMjAyOCwgMCwgMC45ODQ5OV0sXG4gICAgXCIzMzlcIjogWzAsIDAuNDMwNTYsIDAuMDc1MTQsIDAsIDAuNzE1NTVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLjA2NjQ2LCAwLCAwLjUxMTExXSxcbiAgICBcIjcxMVwiOiBbMCwgMC42Mjg0NywgMC4wODI5NSwgMCwgMC41MTExMV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTYxNjcsIDAuMTAzMzMsIDAsIDAuNTExMTFdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5Njk0LCAwLCAwLjUxMTExXSxcbiAgICBcIjcxNVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTExMV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjk0NDQsIDAuMTA4MDYsIDAsIDAuNTExMTFdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLjExNzUyLCAwLCAwLjMwNjY3XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzEyOV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAuMTE1ODUsIDAsIDAuNTExMTFdLFxuICAgIFwiNzMzXCI6IFswLCAwLjY5NDQ0LCAwLjEyMjUsIDAsIDAuNTExMTFdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY4MzMzLCAwLjEzMzA1LCAwLCAwLjYyNzIyXSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MTc3N10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAuMDk0MDMsIDAsIDAuNzY2NjZdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5MjIyXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMC4xNTI5NCwgMCwgMC42NjQ0NF0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAuMTYzODksIDAsIDAuNzQzMzNdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLjEyMDI4LCAwLCAwLjcxNTU1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMC4xMTExMSwgMCwgMC43NjY2Nl0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAuMDU5ODYsIDAsIDAuNzE1NTVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLjExMTExLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMC4xMDI1NywgMCwgMC43MTU1NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjA5MjA4LCAwLCAwLjUxMTExXSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDMwNTYsIDAuMDkyMDgsIDAsIDEuMDIyMjJdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4xMjQxNywgMCwgMC4zMDY2N10sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjEyNDE3LCAwLCAwLjMwNjY3XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTY4NSwgMCwgMC41MTQ0NF0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTYxLCAwLCAwLjUxNDQ0XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdXG4gIH0sXG4gIFwiTWFpbi1SZWd1bGFyXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjE5NDQ0LCAwLjEwNTU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjEwNTU2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI2MFwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYyXCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NjM4OV0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42ODA1Nl0sXG4gICAgXCI3MFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NTI3OF0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43ODQ3Ml0sXG4gICAgXCI3MlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43NV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC4zNjExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC41MTM4OV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42MjVdLFxuICAgIFwiNzdcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuOTE2NjddLFxuICAgIFwiNzhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODFcIjogWzAuMTk0NDQsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODJcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODNcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMDEzODksIDAsIDAuNzVdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMDEzODksIDAsIDEuMDI3NzhdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMDI1LCAwLCAwLjc1XSxcbiAgICBcIjkwXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjkyXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zMSwgMC4xMjA1NiwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMDc3NzgsIDAsIDAuMzA1NTZdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAxMzg5LCAwLCAwLjVdLFxuICAgIFwiMTA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMDZcIjogWzAuMTk0NDQsIDAuNjY3ODYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjExMlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTE0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjM5MTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC4zOTQ0NV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjE1MDgsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiMTE3XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjExOFwiOiBbMCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAuMDEzODksIDAsIDAuNzIyMjJdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMC4wMTM4OSwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTIzXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiMTI0XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjEyNVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMTc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzY5MDldLFxuICAgIFwiMTY3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42Njc4NiwgMCwgMCwgMC41XSxcbiAgICBcIjE3MlwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTc3XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjE4MlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC42MTExMV0sXG4gICAgXCIxODRcIjogWzAuMTcwMTQsIDAsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTk4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjkwMjc4XSxcbiAgICBcIjIxNVwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyMTZcIjogWzAuMDQ4NjEsIDAuNzMxOTQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiMjIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiMjMwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjI0N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCIyNDhcIjogWzAuMDk3MjIsIDAuNTI3NzgsIDAsIDAsIDAuNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiMzM4XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAxLjAxMzg5XSxcbiAgICBcIjMzOVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYyODQ3LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjU2Nzc4LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY2Nzg2LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43NV0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjY3ODYsIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNjI1XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI5MjBcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjkyNlwiOiBbMCwgMC42ODMzMywgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MjhcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjkzM1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjgzMzMsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42ODMzMywgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQzMDU2LCAwLjAyNzc4LCAwLCAwLjVdLFxuICAgIFwiODIxMlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMS4wXSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODIxN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjIwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjgyMjRcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODIyNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4MjMwXCI6IFswLCAwLjEyMywgMCwgMCwgMS4xNzJdLFxuICAgIFwiODI0MlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC4yNzVdLFxuICAgIFwiODQwN1wiOiBbMCwgMC43MTQ0NCwgMC4xNTM4MiwgMCwgMC41XSxcbiAgICBcIjg0NjNcIjogWzAsIDAuNjg4ODksIDAsIDAsIDAuNTQwMjhdLFxuICAgIFwiODQ2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NDY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLjExMTExLCAwLjQxNjY3XSxcbiAgICBcIjg0NzJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMTExMTEsIDAuNjM2NDZdLFxuICAgIFwiODQ3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI4NTAxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg1OTJcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5M1wiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjg1OTRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5NVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC41XSxcbiAgICBcIjg1OTZcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODU5N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg1OThcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NTk5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAxLjBdLFxuICAgIFwiODYwMFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMS4wXSxcbiAgICBcIjg2MDFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjE0XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjE3XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuMTI2XSxcbiAgICBcIjg2MThcIjogWzAuMDExLCAwLjUxMSwgMCwgMCwgMS4xMjZdLFxuICAgIFwiODYzNlwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjM3XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NDBcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY0MVwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjUyXCI6IFswLjAxMSwgMC42NzEsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU2XCI6IFstMC4xMzMxMywgMC4zNjY4NywgMCwgMCwgMS4wXSxcbiAgICBcIjg2NTdcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODY1OFwiOiBbLTAuMTMzMTMsIDAuMzY2ODcsIDAsIDAsIDEuMF0sXG4gICAgXCI4NjU5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg2NjBcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAxLjBdLFxuICAgIFwiODY2MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC42MTExMV0sXG4gICAgXCI4NzA0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDZcIjogWzAsIDAuNjk0NDQsIDAuMDU1NTYsIDAuMDgzMzQsIDAuNTMwOV0sXG4gICAgXCI4NzA3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjg3MDlcIjogWzAuMDU1NTYsIDAuNzUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzExXCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg3MTJcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3MTVcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3MjJcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcyM1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4NzI1XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyNlwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MjdcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiODcyOFwiOiBbLTAuMDU1NTUsIDAuNDQ0NDUsIDAsIDAsIDAuNV0sXG4gICAgXCI4NzI5XCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg3MzBcIjogWzAuMiwgMC44LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg3MzNcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODczNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzZcIjogWzAsIDAuNjkyMjQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiODczOVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4NzQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiODc0M1wiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ0XCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg3NDVcIjogWzAsIDAuNTU1NTYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODc0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NzQ3XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjExMTExLCAwLCAwLjQxNjY3XSxcbiAgICBcIjg3NjRcIjogWy0wLjEzMzEzLCAwLjM2Njg3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg3NjhcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiODc3MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc3M1wiOiBbLTAuMDIyLCAwLjU4OSwgMCwgMCwgMC43NzhdLFxuICAgIFwiODc3NlwiOiBbLTAuMDE2ODgsIDAuNDgzMTIsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4MVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODc4NFwiOiBbLTAuMTMzLCAwLjY3MywgMCwgMCwgMC43NzhdLFxuICAgIFwiODgwMVwiOiBbLTAuMDM2MjUsIDAuNDYzNzUsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODgwNFwiOiBbMC4xMzU5NywgMC42MzU5NywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODA1XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MTBcIjogWzAuMDM5MSwgMC41MzkxLCAwLCAwLCAxLjBdLFxuICAgIFwiODgxMVwiOiBbMC4wMzkxLCAwLjUzOTEsIDAsIDAsIDEuMF0sXG4gICAgXCI4ODI2XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODI3XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM0XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM1XCI6IFswLjAzOTEsIDAuNTM5MSwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODM4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4MzlcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg0NlwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODQ5XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTBcIjogWzAuMTM1OTcsIDAuNjM1OTcsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1MVwiOiBbMCwgMC41NTU1NiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4ODUyXCI6IFswLCAwLjU1NTU2LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg4NTNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1NFwiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODU1XCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NTZcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODg1N1wiOiBbMC4wODMzMywgMC41ODMzMywgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYxMTExXSxcbiAgICBcIjg4NjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODg2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI4ODY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg4NzJcIjogWzAuMjQ5LCAwLjc1LCAwLCAwLCAwLjg2N10sXG4gICAgXCI4OTAwXCI6IFstMC4wNTU1NSwgMC40NDQ0NSwgMCwgMCwgMC41XSxcbiAgICBcIjg5MDFcIjogWy0wLjA1NTU1LCAwLjQ0NDQ1LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjg5MDJcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiODkwNFwiOiBbMC4wMDUsIDAuNTA1LCAwLCAwLCAwLjldLFxuICAgIFwiODk0MlwiOiBbMC4wMywgMC45MDMsIDAsIDAsIDAuMjc4XSxcbiAgICBcIjg5NDNcIjogWy0wLjE5LCAwLjMxMywgMCwgMCwgMS4xNzJdLFxuICAgIFwiODk0NVwiOiBbLTAuMSwgMC44MjMsIDAsIDAsIDEuMjgyXSxcbiAgICBcIjg5NjhcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk2OVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCI4OTcwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjg5NzFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiODk5NFwiOiBbLTAuMTQyMzYsIDAuMzU3NjQsIDAsIDAsIDEuMF0sXG4gICAgXCI4OTk1XCI6IFstMC4xNDIzNiwgMC4zNTc2NCwgMCwgMCwgMS4wXSxcbiAgICBcIjkxMzZcIjogWzAuMjQ0LCAwLjc0NCwgMCwgMCwgMC40MTJdLFxuICAgIFwiOTEzN1wiOiBbMC4yNDQsIDAuNzQ1LCAwLCAwLCAwLjQxMl0sXG4gICAgXCI5NjUxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjk2NTdcIjogWy0wLjAzNDcyLCAwLjQ2NTI4LCAwLCAwLCAwLjVdLFxuICAgIFwiOTY2MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5NjY3XCI6IFstMC4wMzQ3MiwgMC40NjUyOCwgMCwgMCwgMC41XSxcbiAgICBcIjk3MTFcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAsIDAsIDEuMF0sXG4gICAgXCI5ODI0XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MjVcIjogWzAuMTI5NjMsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTgyNlwiOiBbMC4xMjk2MywgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5ODI3XCI6IFswLjEyOTYzLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjk4MzdcIjogWzAsIDAuNzUsIDAsIDAsIDAuMzg4ODldLFxuICAgIFwiOTgzOFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC4zODg4OV0sXG4gICAgXCI5ODM5XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjE2XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjE3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjEwMjIyXCI6IFswLjI0NCwgMC43NDQsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjEwMjIzXCI6IFswLjI0NCwgMC43NDUsIDAsIDAsIDAuNDEyXSxcbiAgICBcIjEwMjI5XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjA5XSxcbiAgICBcIjEwMjMwXCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwMjMxXCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuODU5XSxcbiAgICBcIjEwMjMyXCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuNjA5XSxcbiAgICBcIjEwMjMzXCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwMjM0XCI6IFswLjAyNCwgMC41MjUsIDAsIDAsIDEuODU4XSxcbiAgICBcIjEwMjM2XCI6IFswLjAxMSwgMC41MTEsIDAsIDAsIDEuNjM4XSxcbiAgICBcIjEwODE1XCI6IFswLCAwLjY4MzMzLCAwLCAwLCAwLjc1XSxcbiAgICBcIjEwOTI3XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjEwOTI4XCI6IFswLjEzNTk3LCAwLjYzNTk3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjU3Mzc2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwXVxuICB9LFxuICBcIk1hdGgtQm9sZEl0YWxpY1wiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNTVcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTc1XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjU3NV0sXG4gICAgXCI1N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC41NzVdLFxuICAgIFwiNjVcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuODY5NDRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODY2NF0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC44MTY5NF0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC45MzgxMl0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44MTAwN10sXG4gICAgXCI3MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42ODg4OV0sXG4gICAgXCI3MVwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44ODY3M10sXG4gICAgXCI3MlwiOiBbMCwgMC42ODYxMSwgMC4wODIyOSwgMCwgMC45ODIyOV0sXG4gICAgXCI3M1wiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC41MTExMV0sXG4gICAgXCI3NFwiOiBbMCwgMC42ODYxMSwgMC4xMDA2OSwgMCwgMC42MzEyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC45NzExOF0sXG4gICAgXCI3NlwiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC43NTU1NV0sXG4gICAgXCI3N1wiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMS4xNDIwMV0sXG4gICAgXCI3OFwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC45NTAzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42ODYxMSwgMC4wMzE5NCwgMCwgMC44MzY2Nl0sXG4gICAgXCI4MFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC43MjMwOV0sXG4gICAgXCI4MVwiOiBbMC4xOTQ0NCwgMC42ODYxMSwgMCwgMCwgMC44Njg2MV0sXG4gICAgXCI4MlwiOiBbMCwgMC42ODYxMSwgMC4wMDQyMSwgMCwgMC44NzIzNV0sXG4gICAgXCI4M1wiOiBbMCwgMC42ODYxMSwgMC4wNTM4MiwgMCwgMC42OTI3MV0sXG4gICAgXCI4NFwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42MzY2M10sXG4gICAgXCI4NVwiOiBbMCwgMC42ODYxMSwgMC4xMTQyNCwgMCwgMC44MDAyN10sXG4gICAgXCI4NlwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42Nzc3OF0sXG4gICAgXCI4N1wiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMS4wOTMwNV0sXG4gICAgXCI4OFwiOiBbMCwgMC42ODYxMSwgMC4wNzc3OCwgMCwgMC45NDcyMl0sXG4gICAgXCI4OVwiOiBbMCwgMC42ODYxMSwgMC4yNTU1NSwgMCwgMC42NzQ1OF0sXG4gICAgXCI5MFwiOiBbMCwgMC42ODYxMSwgMC4wNjk3OSwgMCwgMC43NzI1N10sXG4gICAgXCI5N1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC42MzI4N10sXG4gICAgXCI5OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MjA4M10sXG4gICAgXCI5OVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTM0Ml0sXG4gICAgXCIxMDBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjA5NzJdLFxuICAgIFwiMTAxXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjU1MzYxXSxcbiAgICBcIjEwMlwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4xMTA0MiwgMCwgMC41NjgwNl0sXG4gICAgXCIxMDNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNTQ0OV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY3NTldLFxuICAgIFwiMTA1XCI6IFswLCAwLjY5MzI2LCAwLCAwLCAwLjQwNDhdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5MzI2LCAwLjA2MjIsIDAsIDAuNDcwODNdLFxuICAgIFwiMTA3XCI6IFswLCAwLjY5NDQ0LCAwLjAxODUyLCAwLCAwLjYwMzddLFxuICAgIFwiMTA4XCI6IFswLCAwLjY5NDQ0LCAwLjAwODgsIDAsIDAuMzQ4MTVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAxLjAzMjRdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjcxMjk2XSxcbiAgICBcIjExMVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNjAwOTJdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjU0MjEzXSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC41Mjg3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MzEyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNjM0OTIsIDAsIDAsIDAuNDE1MjhdLFxuICAgIFwiMTE3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY4MTAyXSxcbiAgICBcIjExOFwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41NjY2Nl0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuODMxNDhdLFxuICAgIFwiMTIwXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY1OTAzXSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC41OTAyOF0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDQ0NDQsIDAuMDQyMTMsIDAsIDAuNTU1MDldLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjkxNVwiOiBbMCwgMC42ODYxMSwgMC4xNTk3MiwgMCwgMC42NTY5NF0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjg2MTEsIDAsIDAsIDAuOTU4MzNdLFxuICAgIFwiOTIwXCI6IFswLCAwLjY4NjExLCAwLjAzMTk0LCAwLCAwLjg2NzIyXSxcbiAgICBcIjkyM1wiOiBbMCwgMC42ODYxMSwgMCwgMCwgMC44MDU1NV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjg2MTEsIDAuMDc0NTgsIDAsIDAuODQxMjVdLFxuICAgIFwiOTI4XCI6IFswLCAwLjY4NjExLCAwLjA4MjI5LCAwLCAwLjk4MjI5XSxcbiAgICBcIjkzMVwiOiBbMCwgMC42ODYxMSwgMC4wNTQ1MSwgMCwgMC44ODUwN10sXG4gICAgXCI5MzNcIjogWzAsIDAuNjg2MTEsIDAuMTU5NzIsIDAsIDAuNjcwODNdLFxuICAgIFwiOTM0XCI6IFswLCAwLjY4NjExLCAwLCAwLCAwLjc2NjY2XSxcbiAgICBcIjkzNlwiOiBbMCwgMC42ODYxMSwgMC4xMTY1MywgMCwgMC43MTQwMl0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjg2MTEsIDAuMDQ4MzUsIDAsIDAuODc4OV0sXG4gICAgXCI5NDVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNzYwNjRdLFxuICAgIFwiOTQ2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNDAzLCAwLCAwLjY1OTcyXSxcbiAgICBcIjk0N1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wNjM4OSwgMCwgMC41OTAwM10sXG4gICAgXCI5NDhcIjogWzAsIDAuNjk0NDQsIDAuMDM4MTksIDAsIDAuNTIyMjJdLFxuICAgIFwiOTQ5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjUyODgyXSxcbiAgICBcIjk1MFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNjIxNSwgMCwgMC41MDgzM10sXG4gICAgXCI5NTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNl0sXG4gICAgXCI5NTJcIjogWzAsIDAuNjk0NDQsIDAuMDMxOTQsIDAsIDAuNTYxOF0sXG4gICAgXCI5NTNcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDEyMDRdLFxuICAgIFwiOTU0XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjY2NzU5XSxcbiAgICBcIjk1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzA4M10sXG4gICAgXCI5NTZcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzA3ODddLFxuICAgIFwiOTU3XCI6IFswLCAwLjQ0NDQ0LCAwLjA2ODk4LCAwLCAwLjU3Njg1XSxcbiAgICBcIjk1OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzAyMSwgMCwgMC41MDgzM10sXG4gICAgXCI5NTlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNTg0NzJdLFxuICAgIFwiOTYwXCI6IFswLCAwLjQ0NDQ0LCAwLjAzNzA0LCAwLCAwLjY4MjQxXSxcbiAgICBcIjk2MVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MTE4XSxcbiAgICBcIjk2MlwiOiBbMC4wOTcyMiwgMC40NDQ0NCwgMC4wNzkxNywgMCwgMC40MjM2MV0sXG4gICAgXCI5NjNcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNjg1ODhdLFxuICAgIFwiOTY0XCI6IFswLCAwLjQ0NDQ0LCAwLjEzNDcyLCAwLCAwLjUyMDgzXSxcbiAgICBcIjk2NVwiOiBbMCwgMC40NDQ0NCwgMC4wMzcwNCwgMCwgMC42MzA1NV0sXG4gICAgXCI5NjZcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNzQ3MjJdLFxuICAgIFwiOTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjcxODA1XSxcbiAgICBcIjk2OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wMzcwNCwgMCwgMC43NTgzM10sXG4gICAgXCI5NjlcIjogWzAsIDAuNDQ0NDQsIDAuMDM3MDQsIDAsIDAuNzE3ODJdLFxuICAgIFwiOTc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5MTU1XSxcbiAgICBcIjk4MVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC43MTI1XSxcbiAgICBcIjk4MlwiOiBbMCwgMC40NDQ0NCwgMC4wMzE5NCwgMCwgMC45NzVdLFxuICAgIFwiMTAwOVwiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMCwgMCwgMC42MTE4XSxcbiAgICBcIjEwMTNcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDgzMzNdLFxuICAgIFwiNTc2NDlcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzkzNTJdLFxuICAgIFwiNTc5MTFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNDM4ODldXG4gIH0sXG4gIFwiTWF0aC1JdGFsaWNcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY0NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAsIDAuNV0sXG4gICAgXCI2NVwiOiBbMCwgMC42ODMzMywgMCwgMC4xMzg4OSwgMC43NV0sXG4gICAgXCI2NlwiOiBbMCwgMC42ODMzMywgMC4wNTAxNywgMC4wODMzNCwgMC43NTg1MV0sXG4gICAgXCI2N1wiOiBbMCwgMC42ODMzMywgMC4wNzE1MywgMC4wODMzNCwgMC43MTQ3Ml0sXG4gICAgXCI2OFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wNTU1NiwgMC44Mjc5Ml0sXG4gICAgXCI2OVwiOiBbMCwgMC42ODMzMywgMC4wNTc2NCwgMC4wODMzNCwgMC43MzgyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MzA2XSxcbiAgICBcIjcxXCI6IFswLCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc4NjI1XSxcbiAgICBcIjcyXCI6IFswLCAwLjY4MzMzLCAwLjA4MTI1LCAwLjA1NTU2LCAwLjgzMTI1XSxcbiAgICBcIjczXCI6IFswLCAwLjY4MzMzLCAwLjA3ODQ3LCAwLjExMTExLCAwLjQzOTU4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY4MzMzLCAwLjA5NjE4LCAwLjE2NjY3LCAwLjU1NDUxXSxcbiAgICBcIjc1XCI6IFswLCAwLjY4MzMzLCAwLjA3MTUzLCAwLjA1NTU2LCAwLjg0OTMxXSxcbiAgICBcIjc2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjAyNzc4LCAwLjY4MDU2XSxcbiAgICBcIjc3XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjk3MDE0XSxcbiAgICBcIjc4XCI6IFswLCAwLjY4MzMzLCAwLjEwOTAzLCAwLjA4MzM0LCAwLjgwMzQ3XSxcbiAgICBcIjc5XCI6IFswLCAwLjY4MzMzLCAwLjAyNzc4LCAwLjA4MzM0LCAwLjc2Mjc4XSxcbiAgICBcIjgwXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA4MzM0LCAwLjY0MjAxXSxcbiAgICBcIjgxXCI6IFswLjE5NDQ0LCAwLjY4MzMzLCAwLCAwLjA4MzM0LCAwLjc5MDU2XSxcbiAgICBcIjgyXCI6IFswLCAwLjY4MzMzLCAwLjAwNzczLCAwLjA4MzM0LCAwLjc1OTI5XSxcbiAgICBcIjgzXCI6IFswLCAwLjY4MzMzLCAwLjA1NzY0LCAwLjA4MzM0LCAwLjYxMzJdLFxuICAgIFwiODRcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNTg0MzhdLFxuICAgIFwiODVcIjogWzAsIDAuNjgzMzMsIDAuMTA5MDMsIDAuMDI3NzgsIDAuNjgyNzhdLFxuICAgIFwiODZcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgzMzNdLFxuICAgIFwiODdcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAsIDAuOTQ0NDVdLFxuICAgIFwiODhcIjogWzAsIDAuNjgzMzMsIDAuMDc4NDcsIDAuMDgzMzQsIDAuODI4NDddLFxuICAgIFwiODlcIjogWzAsIDAuNjgzMzMsIDAuMjIyMjIsIDAsIDAuNTgwNTZdLFxuICAgIFwiOTBcIjogWzAsIDAuNjgzMzMsIDAuMDcxNTMsIDAuMDgzMzQsIDAuNjgyNjRdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI4NTldLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNDI5MTddLFxuICAgIFwiOTlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDMyNzZdLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLjE2NjY3LCAwLjUyMDQ5XSxcbiAgICBcIjEwMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40NjU2M10sXG4gICAgXCIxMDJcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMTA3NjQsIDAuMTY2NjcsIDAuNDg5NTldLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjQ3Njk3XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NzYxNl0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjU5NTIsIDAsIDAsIDAuMzQ0NTFdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY1OTUyLCAwLjA1NzI0LCAwLCAwLjQxMTgxXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wMzE0OCwgMCwgMC41MjA2XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42OTQ0NCwgMC4wMTk2OCwgMC4wODMzNCwgMC4yOTgzOF0sXG4gICAgXCIxMDlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuODc4MDFdLFxuICAgIFwiMTEwXCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjYwMDIzXSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNTAzMTNdLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA4MzM0LCAwLjQ0NjQxXSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMC4wNTU1NiwgMC40NTExNl0sXG4gICAgXCIxMTVcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDY4NzVdLFxuICAgIFwiMTE2XCI6IFswLCAwLjYxNTA4LCAwLCAwLjA4MzM0LCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzI0Nl0sXG4gICAgXCIxMThcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDI3NzgsIDAuNDg0NzJdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQzMDU2LCAwLjAyNjkxLCAwLjA4MzM0LCAwLjcxNTkyXSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC41NzE1M10sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAuMDM1ODgsIDAuMDU1NTYsIDAuNDkwMjhdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQzMDU2LCAwLjA0Mzk4LCAwLjA1NTU2LCAwLjQ2NTA1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjgzMzMsIDAuMTM4ODksIDAuMDgzMzQsIDAuNjE1MjhdLFxuICAgIFwiOTE2XCI6IFswLCAwLjY4MzMzLCAwLCAwLjE2NjY3LCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42ODMzMywgMC4wMjc3OCwgMC4wODMzNCwgMC43NjI3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjgzMzMsIDAsIDAuMTY2NjcsIDAuNjk0NDVdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY4MzMzLCAwLjA3NTY5LCAwLjA4MzM0LCAwLjc0MjM2XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42ODMzMywgMC4wODEyNSwgMC4wNTU1NiwgMC44MzEyNV0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjgzMzMsIDAuMDU3NjQsIDAuMDgzMzQsIDAuNzc5ODZdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY4MzMzLCAwLjEzODg5LCAwLjA1NTU2LCAwLjU4MzMzXSxcbiAgICBcIjkzNFwiOiBbMCwgMC42ODMzMywgMCwgMC4wODMzNCwgMC42NjY2N10sXG4gICAgXCI5MzZcIjogWzAsIDAuNjgzMzMsIDAuMTEsIDAuMDU1NTYsIDAuNjEyMjJdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY4MzMzLCAwLjA1MDE3LCAwLjA4MzM0LCAwLjc3MjRdLFxuICAgIFwiOTQ1XCI6IFswLCAwLjQzMDU2LCAwLjAwMzcsIDAuMDI3NzgsIDAuNjM5N10sXG4gICAgXCI5NDZcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDUyNzgsIDAuMDgzMzQsIDAuNTY1NjNdLFxuICAgIFwiOTQ3XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjA1NTU2LCAwLCAwLjUxNzczXSxcbiAgICBcIjk0OFwiOiBbMCwgMC42OTQ0NCwgMC4wMzc4NSwgMC4wNTU1NiwgMC40NDQ0NF0sXG4gICAgXCI5NDlcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDgzMzQsIDAuNDY2MzJdLFxuICAgIFwiOTUwXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjA3Mzc4LCAwLjA4MzM0LCAwLjQzNzVdLFxuICAgIFwiOTUxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLjAzNTg4LCAwLjA1NTU2LCAwLjQ5NjUzXSxcbiAgICBcIjk1MlwiOiBbMCwgMC42OTQ0NCwgMC4wMjc3OCwgMC4wODMzNCwgMC40Njk0NF0sXG4gICAgXCI5NTNcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuMzUzOTRdLFxuICAgIFwiOTU0XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjU3NjE2XSxcbiAgICBcIjk1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI5NTZcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDI3NzgsIDAuNjAyNTVdLFxuICAgIFwiOTU3XCI6IFswLCAwLjQzMDU2LCAwLjA2MzY2LCAwLjAyNzc4LCAwLjQ5Mzk4XSxcbiAgICBcIjk1OFwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMC4wNDYwMSwgMC4xMTExMSwgMC40Mzc1XSxcbiAgICBcIjk1OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wNTU1NiwgMC40ODQ3Ml0sXG4gICAgXCI5NjBcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNTcwMDNdLFxuICAgIFwiOTYxXCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUxNzAyXSxcbiAgICBcIjk2MlwiOiBbMC4wOTcyMiwgMC40MzA1NiwgMC4wNzk4NiwgMC4wODMzNCwgMC4zNjI4NV0sXG4gICAgXCI5NjNcIjogWzAsIDAuNDMwNTYsIDAuMDM1ODgsIDAsIDAuNTcxNDFdLFxuICAgIFwiOTY0XCI6IFswLCAwLjQzMDU2LCAwLjExMzIsIDAuMDI3NzgsIDAuNDM3MTVdLFxuICAgIFwiOTY1XCI6IFswLCAwLjQzMDU2LCAwLjAzNTg4LCAwLjAyNzc4LCAwLjU0MDI4XSxcbiAgICBcIjk2NlwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC42NTQxN10sXG4gICAgXCI5NjdcIjogWzAuMTk0NDQsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNjI1NjldLFxuICAgIFwiOTY4XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLjAzNTg4LCAwLjExMTExLCAwLjY1MTM5XSxcbiAgICBcIjk2OVwiOiBbMCwgMC40MzA1NiwgMC4wMzU4OCwgMCwgMC42MjI0NV0sXG4gICAgXCI5NzdcIjogWzAsIDAuNjk0NDQsIDAsIDAuMDgzMzQsIDAuNTkxNDRdLFxuICAgIFwiOTgxXCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLjA4MzM0LCAwLjU5NTgzXSxcbiAgICBcIjk4MlwiOiBbMCwgMC40MzA1NiwgMC4wMjc3OCwgMCwgMC44MjgxM10sXG4gICAgXCIxMDA5XCI6IFswLjE5NDQ0LCAwLjQzMDU2LCAwLCAwLjA4MzM0LCAwLjUxNzAyXSxcbiAgICBcIjEwMTNcIjogWzAsIDAuNDMwNTYsIDAsIDAuMDU1NTYsIDAuNDA1OV0sXG4gICAgXCI1NzY0OVwiOiBbMCwgMC40MzA1NiwgMCwgMC4wMjc3OCwgMC4zMjI0Nl0sXG4gICAgXCI1NzkxMVwiOiBbMC4xOTQ0NCwgMC40MzA1NiwgMCwgMC4wODMzNCwgMC4zODQwM11cbiAgfSxcbiAgXCJTYW5zU2VyaWYtQm9sZFwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zNjY2N10sXG4gICAgXCIzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTgzNF0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC45MTY2N10sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMS4wMjkxMl0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44MzA1Nl0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40Mjc3OF0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC40Mjc3OF0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCI0M1wiOiBbMC4xMTY2NywgMC42MTY2NywgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI0NFwiOiBbMC4xMDU1NiwgMC4xMzA1NiwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0NVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC4zNjY2N10sXG4gICAgXCI0NlwiOiBbMCwgMC4xMzA1NiwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC41NV0sXG4gICAgXCI0OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI0OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1MlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1M1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1N1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI1OVwiOiBbMC4xMDU1NiwgMC40NTgzMywgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI2MVwiOiBbLTAuMDkzNzUsIDAuNDA2MjUsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiNjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE5NDVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNjdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiNjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQxNjddLFxuICAgIFwiNzBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiNzFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiNzJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzMwNTZdLFxuICAgIFwiNzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTE5NDVdLFxuICAgIFwiNzVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTgwNTZdLFxuICAgIFwiNzdcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuOTc3NzhdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiODFcIjogWzAuMTA1NTYsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzAyNzhdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzYzODldLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMDE1MjgsIDAsIDAuNzMzMzRdLFxuICAgIFwiODdcIjogWzAsIDAuNjk0NDQsIDAuMDE1MjgsIDAsIDEuMDM4ODldLFxuICAgIFwiODhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiODlcIjogWzAsIDAuNjk0NDQsIDAuMDI3NSwgMCwgMC43MzMzNF0sXG4gICAgXCI5MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NzIyM10sXG4gICAgXCI5MVwiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zNDMwNl0sXG4gICAgXCI5M1wiOiBbMC4yNSwgMC43NSwgMCwgMCwgMC4zNDMwNl0sXG4gICAgXCI5NFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4xMDgzMywgMC4wMzA1NiwgMCwgMC41NV0sXG4gICAgXCI5N1wiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41MjVdLFxuICAgIFwiOThcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiOTlcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNDg4ODldLFxuICAgIFwiMTAwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjEwMVwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41MTExMV0sXG4gICAgXCIxMDJcIjogWzAsIDAuNjk0NDQsIDAuMDc2MzksIDAsIDAuMzM2MTFdLFxuICAgIFwiMTAzXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjU1XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMDVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY5NDQ0LCAwLCAwLCAwLjI4NjExXSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MzA1Nl0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjg2NjY3XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTFcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTEyXCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjU2MTExXSxcbiAgICBcIjExM1wiOiBbMC4xOTQ0NCwgMC40NTgzMywgMCwgMCwgMC41NjExMV0sXG4gICAgXCIxMTRcIjogWzAsIDAuNDU4MzMsIDAuMDE1MjgsIDAsIDAuMzcyMjJdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQ1ODMzLCAwLCAwLCAwLjQyMTY3XSxcbiAgICBcIjExNlwiOiBbMCwgMC41ODkyOSwgMCwgMCwgMC40MDQxN10sXG4gICAgXCIxMTdcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuNTYxMTFdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjVdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ1ODMzLCAwLjAxNTI4LCAwLCAwLjc0NDQ1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC41XSxcbiAgICBcIjEyMVwiOiBbMC4xOTQ0NCwgMC40NTgzMywgMC4wMTUyOCwgMCwgMC41XSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NTgzMywgMCwgMCwgMC40NzYzOV0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzQ0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiMTYwXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjE2OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzMzMzRdLFxuICAgIFwiMTgwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU1XSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDU4MzMsIDAsIDAsIDAuMjU1NTZdLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ1ODMzLCAwLCAwLCAwLjI4NjExXSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MTFcIjogWzAsIDAuNjM1NDIsIDAsIDAsIDAuNTVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYzNzc4LCAwLCAwLCAwLjU1XSxcbiAgICBcIjcyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MjlcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzA1NTZdLFxuICAgIFwiNzMwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczMzM0XSxcbiAgICBcIjczMlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU4MDU2XSxcbiAgICBcIjkxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC45MTY2N10sXG4gICAgXCI5MjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuODU1NTZdLFxuICAgIFwiOTIzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY3MjIzXSxcbiAgICBcIjkyNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzMzNF0sXG4gICAgXCI5MjhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjkzM1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC44NTU1Nl0sXG4gICAgXCI5MzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzk0NDVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg1NTU2XSxcbiAgICBcIjkzN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43OTQ0NV0sXG4gICAgXCI4MjExXCI6IFswLCAwLjQ1ODMzLCAwLjAzMDU2LCAwLCAwLjU1XSxcbiAgICBcIjgyMTJcIjogWzAsIDAuNDU4MzMsIDAuMDMwNTYsIDAsIDEuMTAwMDFdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4zMDU1Nl0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjMwNTU2XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU4MzRdLFxuICAgIFwiODIyMVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NTgzNF1cbiAgfSxcbiAgXCJTYW5zU2VyaWYtSXRhbGljXCI6IHtcbiAgICBcIjMyXCI6IFswLCAwLCAwLCAwLCAwLjI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjY5NDQ0LCAwLjA1NzMzLCAwLCAwLjMxOTQ1XSxcbiAgICBcIjM0XCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdLFxuICAgIFwiMzVcIjogWzAuMTk0NDQsIDAuNjk0NDQsIDAuMDUwODcsIDAsIDAuODMzMzRdLFxuICAgIFwiMzZcIjogWzAuMDU1NTYsIDAuNzUsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCIzN1wiOiBbMC4wNTU1NiwgMC43NSwgMC4wMzEyNiwgMCwgMC44MzMzNF0sXG4gICAgXCIzOFwiOiBbMCwgMC42OTQ0NCwgMC4wMzA1OCwgMCwgMC43NTgzNF0sXG4gICAgXCIzOVwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI0MFwiOiBbMC4yNSwgMC43NSwgMC4xMzE2NCwgMCwgMC4zODg4OV0sXG4gICAgXCI0MVwiOiBbMC4yNSwgMC43NSwgMC4wMjUzNiwgMCwgMC4zODg4OV0sXG4gICAgXCI0MlwiOiBbMCwgMC43NSwgMC4xMTc3NSwgMCwgMC41XSxcbiAgICBcIjQzXCI6IFswLjA4MzMzLCAwLjU4MzMzLCAwLjAyNTM2LCAwLCAwLjc3Nzc4XSxcbiAgICBcIjQ0XCI6IFswLjEyNSwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0NVwiOiBbMCwgMC40NDQ0NCwgMC4wMTk0NiwgMCwgMC4zMzMzM10sXG4gICAgXCI0NlwiOiBbMCwgMC4wODMzMywgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI0N1wiOiBbMC4yNSwgMC43NSwgMC4xMzE2NCwgMCwgMC41XSxcbiAgICBcIjQ4XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1MFwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjUxXCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1M1wiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU0XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjU1NTYsIDAuMTExNTYsIDAsIDAuNV0sXG4gICAgXCI1NlwiOiBbMCwgMC42NTU1NiwgMC4xMTE1NiwgMCwgMC41XSxcbiAgICBcIjU3XCI6IFswLCAwLjY1NTU2LCAwLjExMTU2LCAwLCAwLjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDQ0NDQsIDAuMDI1MDIsIDAsIDAuMjc3NzhdLFxuICAgIFwiNTlcIjogWzAuMTI1LCAwLjQ0NDQ0LCAwLjAyNTAyLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjYxXCI6IFstMC4xMywgMC4zNywgMC4wNTA4NywgMCwgMC43Nzc3OF0sXG4gICAgXCI2M1wiOiBbMCwgMC42OTQ0NCwgMC4xMTgwOSwgMCwgMC40NzIyMl0sXG4gICAgXCI2NFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC42NjY2N10sXG4gICAgXCI2NVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI2NlwiOiBbMCwgMC42OTQ0NCwgMC4wODI5MywgMCwgMC42NjY2N10sXG4gICAgXCI2N1wiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42Mzg4OV0sXG4gICAgXCI2OFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43MjIyM10sXG4gICAgXCI2OVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC41OTcyMl0sXG4gICAgXCI3MFwiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC41Njk0NV0sXG4gICAgXCI3MVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42NjY2N10sXG4gICAgXCI3MlwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI3M1wiOiBbMCwgMC42OTQ0NCwgMC4xMzM3MiwgMCwgMC4yNzc3OF0sXG4gICAgXCI3NFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC40NzIyMl0sXG4gICAgXCI3NVwiOiBbMCwgMC42OTQ0NCwgMC4xMTk4MywgMCwgMC42OTQ0NV0sXG4gICAgXCI3NlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41NDE2N10sXG4gICAgXCI3N1wiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC44NzVdLFxuICAgIFwiNzhcIjogWzAsIDAuNjk0NDQsIDAuMDgwOTQsIDAsIDAuNzA4MzRdLFxuICAgIFwiNzlcIjogWzAsIDAuNjk0NDQsIDAuMDc1NTUsIDAsIDAuNzM2MTFdLFxuICAgIFwiODBcIjogWzAsIDAuNjk0NDQsIDAuMDgyOTMsIDAsIDAuNjM4ODldLFxuICAgIFwiODFcIjogWzAuMTI1LCAwLjY5NDQ0LCAwLjA3NTU1LCAwLCAwLjczNjExXSxcbiAgICBcIjgyXCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjY0NTg0XSxcbiAgICBcIjgzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjU1NTU2XSxcbiAgICBcIjg0XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjY4MDU2XSxcbiAgICBcIjg1XCI6IFswLCAwLjY5NDQ0LCAwLjA4MDk0LCAwLCAwLjY4NzVdLFxuICAgIFwiODZcIjogWzAsIDAuNjk0NDQsIDAuMTYxNSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4xNjE1LCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg4XCI6IFswLCAwLjY5NDQ0LCAwLjEzMzcyLCAwLCAwLjY2NjY3XSxcbiAgICBcIjg5XCI6IFswLCAwLjY5NDQ0LCAwLjE3MjYxLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkwXCI6IFswLCAwLjY5NDQ0LCAwLjExOTgzLCAwLCAwLjYxMTExXSxcbiAgICBcIjkxXCI6IFswLjI1LCAwLjc1LCAwLjE1OTQyLCAwLCAwLjI4ODg5XSxcbiAgICBcIjkzXCI6IFswLjI1LCAwLjc1LCAwLjA4NzE5LCAwLCAwLjI4ODg5XSxcbiAgICBcIjk0XCI6IFswLCAwLjY5NDQ0LCAwLjA3OTksIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wODYxNiwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLjAwOTgxLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLjAzMDU3LCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLjA4MzM2LCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMC4wOTQ4MywgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAuMDY3NzgsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjIxNzA1LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMC4wMTc3OCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAuMDk3MTgsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLjA5MTYyLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMC4wODMzNiwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAuMDk0ODMsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxNzc4LCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMC4wMTc3OCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDY2MTMsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDM4OSwgMCwgMC41MTY2N10sXG4gICAgXCIxMTNcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuNTE2NjddLFxuICAgIFwiMTE0XCI6IFswLCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjM0MTY3XSxcbiAgICBcIjExNVwiOiBbMCwgMC40NDQ0NCwgMC4wNzc4LCAwLCAwLjM4MzMzXSxcbiAgICBcIjExNlwiOiBbMCwgMC41NzE0MywgMC4wNzIyNSwgMCwgMC4zNjExMV0sXG4gICAgXCIxMTdcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuNTE2NjddLFxuICAgIFwiMTE4XCI6IFswLCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjQ2MTExXSxcbiAgICBcIjExOVwiOiBbMCwgMC40NDQ0NCwgMC4xMDgzNiwgMCwgMC42ODMzNF0sXG4gICAgXCIxMjBcIjogWzAsIDAuNDQ0NDQsIDAuMDkxNjksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIxXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjEwODM2LCAwLCAwLjQ2MTExXSxcbiAgICBcIjEyMlwiOiBbMCwgMC40NDQ0NCwgMC4wODc1MiwgMCwgMC40MzQ3Ml0sXG4gICAgXCIxMjZcIjogWzAuMzUsIDAuMzI2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMTY4XCI6IFswLCAwLjY3OTM3LCAwLjA2Mzg1LCAwLCAwLjVdLFxuICAgIFwiMTc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjczNzUyXSxcbiAgICBcIjE4NFwiOiBbMC4xNzAxNCwgMCwgMCwgMCwgMC40NDQ0NV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDQ0NDQsIDAuMDQxNjksIDAsIDAuMjM4ODldLFxuICAgIFwiNTY3XCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLjA0MTY5LCAwLCAwLjI2NjY3XSxcbiAgICBcIjcxMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzk5LCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLjA4NDMyLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLjA4Nzc2LCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLjA5MjA1LCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLjA5NDgzLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLjA3Nzc0LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Mzc1Ml0sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAuMDg4MjYsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAuMDkyMDUsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAuMTMzNzIsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMC4wNzU1NSwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLjEyODE2LCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMC4wODA5NCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAuMTE5ODMsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLjA5MDMxLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMC4wNDYwMywgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAuMDkwMzEsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLjA4MjkzLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDg2MTYsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjA4NjE2LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMC4wNzgxNiwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLjA3ODE2LCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAuMTQyMDUsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLjAwMzE2LCAwLCAwLjVdXG4gIH0sXG4gIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiMzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMzE5NDVdLFxuICAgIFwiMzRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIzNVwiOiBbMC4xOTQ0NCwgMC42OTQ0NCwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCIzNlwiOiBbMC4wNTU1NiwgMC43NSwgMCwgMCwgMC41XSxcbiAgICBcIjM3XCI6IFswLjA1NTU2LCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjM4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc1ODM0XSxcbiAgICBcIjM5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQwXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQxXCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjM4ODg5XSxcbiAgICBcIjQyXCI6IFswLCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDNcIjogWzAuMDgzMzMsIDAuNTgzMzMsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiNDRcIjogWzAuMTI1LCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ1XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjMzMzMzXSxcbiAgICBcIjQ2XCI6IFswLCAwLjA4MzMzLCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjQ3XCI6IFswLjI1LCAwLjc1LCAwLCAwLCAwLjVdLFxuICAgIFwiNDhcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI0OVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUwXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTFcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1MlwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjUzXCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTRcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1NVwiOiBbMCwgMC42NTU1NiwgMCwgMCwgMC41XSxcbiAgICBcIjU2XCI6IFswLCAwLjY1NTU2LCAwLCAwLCAwLjVdLFxuICAgIFwiNTdcIjogWzAsIDAuNjU1NTYsIDAsIDAsIDAuNV0sXG4gICAgXCI1OFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI1OVwiOiBbMC4xMjUsIDAuNDQ0NDQsIDAsIDAsIDAuMjc3NzhdLFxuICAgIFwiNjFcIjogWy0wLjEzLCAwLjM3LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjYzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjY0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjY3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjY4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIzXSxcbiAgICBcIjY5XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU5NzIyXSxcbiAgICBcIjcwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU2OTQ1XSxcbiAgICBcIjcxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjcyXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcwODM0XSxcbiAgICBcIjczXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjc0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjc1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY5NDQ1XSxcbiAgICBcIjc2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjU0MTY3XSxcbiAgICBcIjc3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI3OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI3OVwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI4MFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4MVwiOiBbMC4xMjUsIDAuNjk0NDQsIDAsIDAsIDAuNzM2MTFdLFxuICAgIFwiODJcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjQ1ODRdLFxuICAgIFwiODNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjgwNTZdLFxuICAgIFwiODVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjg3NV0sXG4gICAgXCI4NlwiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC42NjY2N10sXG4gICAgXCI4N1wiOiBbMCwgMC42OTQ0NCwgMC4wMTM4OSwgMCwgMC45NDQ0NV0sXG4gICAgXCI4OFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4OVwiOiBbMCwgMC42OTQ0NCwgMC4wMjUsIDAsIDAuNjY2NjddLFxuICAgIFwiOTBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTFcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTNcIjogWzAuMjUsIDAuNzUsIDAsIDAsIDAuMjg4ODldLFxuICAgIFwiOTRcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5NVwiOiBbMC4zNSwgMC4wOTQ0NCwgMC4wMjc3OCwgMCwgMC41XSxcbiAgICBcIjk3XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ4MDU2XSxcbiAgICBcIjk4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjk5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjEwMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNDQ0NDVdLFxuICAgIFwiMTAyXCI6IFswLCAwLjY5NDQ0LCAwLjA2OTQ0LCAwLCAwLjMwNTU2XSxcbiAgICBcIjEwM1wiOiBbMC4xOTQ0NCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC41XSxcbiAgICBcIjEwNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMDVcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA2XCI6IFswLjE5NDQ0LCAwLjY3OTM3LCAwLCAwLCAwLjI2NjY3XSxcbiAgICBcIjEwN1wiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC40ODg4OV0sXG4gICAgXCIxMDhcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuMjM4ODldLFxuICAgIFwiMTA5XCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjc5NDQ1XSxcbiAgICBcIjExMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMTFcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCIxMTJcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuNTE2NjddLFxuICAgIFwiMTEzXCI6IFswLjE5NDQ0LCAwLjQ0NDQ0LCAwLCAwLCAwLjUxNjY3XSxcbiAgICBcIjExNFwiOiBbMCwgMC40NDQ0NCwgMC4wMTM4OSwgMCwgMC4zNDE2N10sXG4gICAgXCIxMTVcIjogWzAsIDAuNDQ0NDQsIDAsIDAsIDAuMzgzMzNdLFxuICAgIFwiMTE2XCI6IFswLCAwLjU3MTQzLCAwLCAwLCAwLjM2MTExXSxcbiAgICBcIjExN1wiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC41MTY2N10sXG4gICAgXCIxMThcIjogWzAsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTE5XCI6IFswLCAwLjQ0NDQ0LCAwLjAxMzg5LCAwLCAwLjY4MzM0XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC40NjExMV0sXG4gICAgXCIxMjFcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAuMDEzODksIDAsIDAuNDYxMTFdLFxuICAgIFwiMTIyXCI6IFswLCAwLjQ0NDQ0LCAwLCAwLCAwLjQzNDcyXSxcbiAgICBcIjEyNlwiOiBbMC4zNSwgMC4zMjY1OSwgMCwgMCwgMC41XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCIxNjhcIjogWzAsIDAuNjc5MzcsIDAsIDAsIDAuNV0sXG4gICAgXCIxNzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiMTg0XCI6IFswLjE3MDE0LCAwLCAwLCAwLCAwLjQ0NDQ1XSxcbiAgICBcIjMwNVwiOiBbMCwgMC40NDQ0NCwgMCwgMCwgMC4yMzg4OV0sXG4gICAgXCI1NjdcIjogWzAuMTk0NDQsIDAuNDQ0NDQsIDAsIDAsIDAuMjY2NjddLFxuICAgIFwiNzEwXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjYzMTk0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzEzXCI6IFswLCAwLjYwODg5LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE0XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI4XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdLFxuICAgIFwiNzI5XCI6IFswLCAwLjY3OTM3LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjczMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI3MzJcIjogWzAsIDAuNjc2NTksIDAsIDAsIDAuNV0sXG4gICAgXCI3MzNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI5MTVcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNTQxNjddLFxuICAgIFwiOTE2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43Nzc3OF0sXG4gICAgXCI5MjNcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiOTI2XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MDgzNF0sXG4gICAgXCI5MzFcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzIyMjJdLFxuICAgIFwiOTMzXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC43MjIyMl0sXG4gICAgXCI5MzZcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiOTM3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjcyMjIyXSxcbiAgICBcIjgyMTFcIjogWzAsIDAuNDQ0NDQsIDAuMDI3NzgsIDAsIDAuNV0sXG4gICAgXCI4MjEyXCI6IFswLCAwLjQ0NDQ0LCAwLjAyNzc4LCAwLCAxLjBdLFxuICAgIFwiODIxNlwiOiBbMCwgMC42OTQ0NCwgMCwgMCwgMC4yNzc3OF0sXG4gICAgXCI4MjE3XCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjI3Nzc4XSxcbiAgICBcIjgyMjBcIjogWzAsIDAuNjk0NDQsIDAsIDAsIDAuNV0sXG4gICAgXCI4MjIxXCI6IFswLCAwLjY5NDQ0LCAwLCAwLCAwLjVdXG4gIH0sXG4gIFwiU2NyaXB0LVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNjVcIjogWzAsIDAuNywgMC4yMjkyNSwgMCwgMC44MDI1M10sXG4gICAgXCI2NlwiOiBbMCwgMC43LCAwLjA0MDg3LCAwLCAwLjkwNzU3XSxcbiAgICBcIjY3XCI6IFswLCAwLjcsIDAuMTY4OSwgMCwgMC42NjYxOV0sXG4gICAgXCI2OFwiOiBbMCwgMC43LCAwLjA5MzcxLCAwLCAwLjc3NDQzXSxcbiAgICBcIjY5XCI6IFswLCAwLjcsIDAuMTg1ODMsIDAsIDAuNTYxNjJdLFxuICAgIFwiNzBcIjogWzAsIDAuNywgMC4xMzYzNCwgMCwgMC44OTU0NF0sXG4gICAgXCI3MVwiOiBbMCwgMC43LCAwLjE3MzIyLCAwLCAwLjYwOTYxXSxcbiAgICBcIjcyXCI6IFswLCAwLjcsIDAuMjk2OTQsIDAsIDAuOTY5MTldLFxuICAgIFwiNzNcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44MDkwN10sXG4gICAgXCI3NFwiOiBbMC4yNzc3OCwgMC43LCAwLjE5MTg5LCAwLCAxLjA1MTU5XSxcbiAgICBcIjc1XCI6IFswLCAwLjcsIDAuMzEyNTksIDAsIDAuOTEzNjRdLFxuICAgIFwiNzZcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44NzM3M10sXG4gICAgXCI3N1wiOiBbMCwgMC43LCAwLjE1OTgxLCAwLCAxLjA4MDMxXSxcbiAgICBcIjc4XCI6IFswLCAwLjcsIDAuMzUyNSwgMCwgMC45MDE1XSxcbiAgICBcIjc5XCI6IFswLCAwLjcsIDAuMDgwNzgsIDAsIDAuNzM3ODddLFxuICAgIFwiODBcIjogWzAsIDAuNywgMC4wODA3OCwgMCwgMS4wMTI2Ml0sXG4gICAgXCI4MVwiOiBbMCwgMC43LCAwLjAzMzA1LCAwLCAwLjg4MjgyXSxcbiAgICBcIjgyXCI6IFswLCAwLjcsIDAuMDYyNTksIDAsIDAuODVdLFxuICAgIFwiODNcIjogWzAsIDAuNywgMC4xOTE4OSwgMCwgMC44Njc2N10sXG4gICAgXCI4NFwiOiBbMCwgMC43LCAwLjI5MDg3LCAwLCAwLjc0Njk3XSxcbiAgICBcIjg1XCI6IFswLCAwLjcsIDAuMjU4MTUsIDAsIDAuNzk5OTZdLFxuICAgIFwiODZcIjogWzAsIDAuNywgMC4yNzUyMywgMCwgMC42MjIwNF0sXG4gICAgXCI4N1wiOiBbMCwgMC43LCAwLjI3NTIzLCAwLCAwLjgwNTMyXSxcbiAgICBcIjg4XCI6IFswLCAwLjcsIDAuMjYwMDYsIDAsIDAuOTQ0NDVdLFxuICAgIFwiODlcIjogWzAsIDAuNywgMC4yOTM5LCAwLCAwLjcwOTYxXSxcbiAgICBcIjkwXCI6IFswLCAwLjcsIDAuMjQwMzcsIDAsIDAuODIxMl0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdXG4gIH0sXG4gIFwiU2l6ZTEtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NTgzNF0sXG4gICAgXCI0MVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NTgzNF0sXG4gICAgXCI0N1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41Nzc3OF0sXG4gICAgXCI5MVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40MTY2N10sXG4gICAgXCI5MlwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC41Nzc3OF0sXG4gICAgXCI5M1wiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40MTY2N10sXG4gICAgXCIxMjNcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTI1XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiNzMyXCI6IFswLCAwLjcyMjIyLCAwLCAwLCAwLjU1NTU2XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43MjIyMiwgMCwgMCwgMC41NTU1Nl0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzIyMjIsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODIxNFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg1OTNcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiODU5NVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI4NjU3XCI6IFsxZS0wNSwgMC42LCAwLCAwLCAwLjc3Nzc4XSxcbiAgICBcIjg2NTlcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuNzc3NzhdLFxuICAgIFwiODcxOVwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC45NDQ0NV0sXG4gICAgXCI4NzIwXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjk0NDQ1XSxcbiAgICBcIjg3MjFcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiODczMFwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3MzlcIjogWy0wLjAwNTk5LCAwLjYwNiwgMCwgMCwgMC4zMzMzM10sXG4gICAgXCI4NzQxXCI6IFstMC4wMDU5OSwgMC42MDYsIDAsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0N1wiOiBbMC4zMDYxMiwgMC44MDUsIDAuMTk0NDUsIDAsIDAuNDcyMjJdLFxuICAgIFwiODc0OFwiOiBbMC4zMDYsIDAuODA1LCAwLjE5NDQ1LCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg3NDlcIjogWzAuMzA2LCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4NzUwXCI6IFswLjMwNjEyLCAwLjgwNSwgMC4xOTQ0NSwgMCwgMC40NzIyMl0sXG4gICAgXCI4ODk2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg4OTdcIjogWzAuMjUwMDEsIDAuNzUsIDAsIDAsIDAuODMzMzRdLFxuICAgIFwiODg5OFwiOiBbMC4yNTAwMSwgMC43NSwgMCwgMCwgMC44MzMzNF0sXG4gICAgXCI4ODk5XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjg5NjhcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiODk2OVwiOiBbMC4zNTAwMSwgMC44NSwgMCwgMCwgMC40NzIyMl0sXG4gICAgXCI4OTcwXCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjg5NzFcIjogWzAuMzUwMDEsIDAuODUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTE2OFwiOiBbLTAuMDAwOTksIDAuNjAxLCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEwMjE2XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwMjE3XCI6IFswLjM1MDAxLCAwLjg1LCAwLCAwLCAwLjQ3MjIyXSxcbiAgICBcIjEwNzUyXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzUzXCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU0XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjEwNzU2XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XSxcbiAgICBcIjEwNzU4XCI6IFswLjI1MDAxLCAwLjc1LCAwLCAwLCAwLjgzMzM0XVxuICB9LFxuICBcIlNpemUyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNDBcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTk3MjJdLFxuICAgIFwiNDdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiOTJcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuODExMTFdLFxuICAgIFwiOTNcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNDcyMjJdLFxuICAgIFwiMTIzXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjEyNVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuMjVdLFxuICAgIFwiNzEwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzMyXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzcwXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiNzcxXCI6IFswLCAwLjc1LCAwLCAwLCAxLjBdLFxuICAgIFwiODcxOVwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI4NzIwXCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjI3Nzc4XSxcbiAgICBcIjg3MjFcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiODczMFwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMS4wXSxcbiAgICBcIjg3NDdcIjogWzAuODYyMjUsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0OFwiOiBbMC44NjIsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc0OVwiOiBbMC44NjIsIDEuMzYsIDAuNDQ0NDUsIDAsIDAuNTU1NTZdLFxuICAgIFwiODc1MFwiOiBbMC44NjIyNSwgMS4zNiwgMC40NDQ0NSwgMCwgMC41NTU1Nl0sXG4gICAgXCI4ODk2XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg4OTdcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiODg5OFwiOiBbMC41NTAwMSwgMS4wNSwgMCwgMCwgMS4xMTExMV0sXG4gICAgXCI4ODk5XCI6IFswLjU1MDAxLCAxLjA1LCAwLCAwLCAxLjExMTExXSxcbiAgICBcIjg5NjhcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiODk2OVwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI4OTcwXCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjUyNzc4XSxcbiAgICBcIjg5NzFcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNTI3NzhdLFxuICAgIFwiMTAyMTZcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTAyMTdcIjogWzAuNjUwMDIsIDEuMTUsIDAsIDAsIDAuNjExMTFdLFxuICAgIFwiMTA3NTJcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTNcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTRcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuNTExMTJdLFxuICAgIFwiMTA3NTZcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdLFxuICAgIFwiMTA3NThcIjogWzAuNTUwMDEsIDEuMDUsIDAsIDAsIDEuMTExMTFdXG4gIH0sXG4gIFwiU2l6ZTMtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI0MVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC43MzYxMV0sXG4gICAgXCI0N1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wNDQ0NV0sXG4gICAgXCI5MVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCI5MlwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wNDQ0NV0sXG4gICAgXCI5M1wiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41Mjc3OF0sXG4gICAgXCIxMjNcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTI1XCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjc1XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiNzMyXCI6IFswLCAwLjc1LCAwLCAwLCAxLjQ0NDQ1XSxcbiAgICBcIjc3MFwiOiBbMCwgMC43NSwgMCwgMCwgMS40NDQ0NV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNzUsIDAsIDAsIDEuNDQ0NDVdLFxuICAgIFwiODczMFwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiODk2OVwiOiBbMC45NTAwMywgMS40NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI4OTcwXCI6IFswLjk1MDAzLCAxLjQ1LCAwLCAwLCAwLjU4MzM0XSxcbiAgICBcIjg5NzFcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNTgzMzRdLFxuICAgIFwiMTAyMTZcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdLFxuICAgIFwiMTAyMTdcIjogWzAuOTUwMDMsIDEuNDUsIDAsIDAsIDAuNzVdXG4gIH0sXG4gIFwiU2l6ZTQtUmVndWxhclwiOiB7XG4gICAgXCIzMlwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI0MFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC43OTE2N10sXG4gICAgXCI0MVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC43OTE2N10sXG4gICAgXCI0N1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI5MVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCI5MlwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4yNzc3OF0sXG4gICAgXCI5M1wiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC41ODMzNF0sXG4gICAgXCIxMjNcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuODA1NTZdLFxuICAgIFwiMTI1XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjE2MFwiOiBbMCwgMCwgMCwgMCwgMC4yNV0sXG4gICAgXCI3MTBcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiNzMyXCI6IFswLCAwLjgyNSwgMCwgMCwgMS44ODg5XSxcbiAgICBcIjc3MFwiOiBbMCwgMC44MjUsIDAsIDAsIDEuODg4OV0sXG4gICAgXCI3NzFcIjogWzAsIDAuODI1LCAwLCAwLCAxLjg4ODldLFxuICAgIFwiODczMFwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMS4wXSxcbiAgICBcIjg5NjhcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiODk2OVwiOiBbMS4yNTAwMywgMS43NSwgMCwgMCwgMC42Mzg4OV0sXG4gICAgXCI4OTcwXCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjYzODg5XSxcbiAgICBcIjg5NzFcIjogWzEuMjUwMDMsIDEuNzUsIDAsIDAsIDAuNjM4ODldLFxuICAgIFwiOTExNVwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTZcIjogWzFlLTA1LCAwLjYsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMTdcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjg3NV0sXG4gICAgXCI5MTE4XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTExOVwiOiBbMWUtMDUsIDAuNiwgMCwgMCwgMC44NzVdLFxuICAgIFwiOTEyMFwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuODc1XSxcbiAgICBcIjkxMjFcIjogWzAuNjQ1MDIsIDEuMTU1LCAwLCAwLCAwLjY2NjY3XSxcbiAgICBcIjkxMjJcIjogWy0wLjAwMDk5LCAwLjYwMSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTIzXCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI0XCI6IFswLjY0NTAyLCAxLjE1NSwgMCwgMCwgMC42NjY2N10sXG4gICAgXCI5MTI1XCI6IFstMC4wMDA5OSwgMC42MDEsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyNlwiOiBbMC42NDUwMiwgMS4xNTUsIDAsIDAsIDAuNjY2NjddLFxuICAgIFwiOTEyN1wiOiBbMWUtMDUsIDAuOSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTI4XCI6IFswLjY1MDAyLCAxLjE1LCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMjlcIjogWzAuOTAwMDEsIDAsIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMFwiOiBbMCwgMC4zLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxMzFcIjogWzFlLTA1LCAwLjksIDAsIDAsIDAuODg4ODldLFxuICAgIFwiOTEzMlwiOiBbMC42NTAwMiwgMS4xNSwgMCwgMCwgMC44ODg4OV0sXG4gICAgXCI5MTMzXCI6IFswLjkwMDAxLCAwLCAwLCAwLCAwLjg4ODg5XSxcbiAgICBcIjkxNDNcIjogWzAuODg1MDIsIDAuOTE1LCAwLCAwLCAxLjA1NTU2XSxcbiAgICBcIjEwMjE2XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjEwMjE3XCI6IFsxLjI1MDAzLCAxLjc1LCAwLCAwLCAwLjgwNTU2XSxcbiAgICBcIjU3MzQ0XCI6IFstMC4wMDQ5OSwgMC42MDUsIDAsIDAsIDEuMDU1NTZdLFxuICAgIFwiNTczNDVcIjogWy0wLjAwNDk5LCAwLjYwNSwgMCwgMCwgMS4wNTU1Nl0sXG4gICAgXCI1NzY4MFwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MVwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4MlwiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV0sXG4gICAgXCI1NzY4M1wiOiBbMCwgMC4xMiwgMCwgMCwgMC40NV1cbiAgfSxcbiAgXCJUeXBld3JpdGVyLVJlZ3VsYXJcIjoge1xuICAgIFwiMzJcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjMzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM2XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzN1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMzhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjM5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0MFwiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQyXCI6IFswLCAwLjUyMDgzLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0M1wiOiBbLTAuMDgwNTYsIDAuNTMwNTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ0XCI6IFswLjEzODg5LCAwLjEyNSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDVcIjogWy0wLjA4MDU2LCAwLjUzMDU1LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0NlwiOiBbMCwgMC4xMjUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjQ3XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI0OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNDlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1MVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjUzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNTVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI1N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNThcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU5XCI6IFswLjEzODg5LCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2MFwiOiBbLTAuMDU1NTYsIDAuNTU1NTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjYxXCI6IFstMC4xOTU0OSwgMC40MTU2MiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjJcIjogWy0wLjA1NTU2LCAwLjU1NTU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2M1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNjdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjY4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI2OVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzBcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc0XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3OFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzlcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4MVwiOiBbMC4xMzg4OSwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4NFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODVcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI4N1wiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiODhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjg5XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTFcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyXCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5M1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk1XCI6IFswLjA5NTE0LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTdcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjk4XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5OVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDFcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwMlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTAzXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDRcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwNVwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA2XCI6IFswLjIyMjIyLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMDdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEwOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTA5XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTBcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExMVwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTEyXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTNcIjogWzAuMjIyMjIsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExNFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE1XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTZcIjogWzAsIDAuNTUzNTgsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjExN1wiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTE4XCI6IFswLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMTlcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyMFwiOiBbMCwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTIxXCI6IFswLjIyMjIyLCAwLjQzMDU2LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjJcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyM1wiOiBbMC4wODMzMywgMC42OTQ0NCwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI0XCI6IFswLjA4MzMzLCAwLjY5NDQ0LCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxMjVcIjogWzAuMDgzMzMsIDAuNjk0NDQsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjEyNlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTI3XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIxNjBcIjogWzAsIDAsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjE3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiMTg0XCI6IFswLjE5NDQ1LCAwLCAwLCAwLCAwLjUyNV0sXG4gICAgXCIzMDVcIjogWzAsIDAuNDMwNTYsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjU2N1wiOiBbMC4yMjIyMiwgMC40MzA1NiwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzExXCI6IFswLCAwLjU2NTk3LCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MTNcIjogWzAsIDAuNTY1NTUsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjcxNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3MjhcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjczMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiNzcwXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI3NzFcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjc3NlwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTE1XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyMFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTIzXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MjZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyOFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTMxXCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzNcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkzNFwiOiBbMCwgMC42MTExMSwgMCwgMCwgMC41MjVdLFxuICAgIFwiOTM2XCI6IFswLCAwLjYxMTExLCAwLCAwLCAwLjUyNV0sXG4gICAgXCI5MzdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTZcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyMTdcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjgyNDJcIjogWzAsIDAuNjExMTEsIDAsIDAsIDAuNTI1XSxcbiAgICBcIjkyNTFcIjogWzAuMTExMTEsIDAuMjE5NDQsIDAsIDAsIDAuNTI1XVxuICB9XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBtZXRyaWNzIHJlZ2FyZGluZyBmb250cyBhbmQgaW5kaXZpZHVhbCBzeW1ib2xzLiBUaGUgc2lnbWFcbiAqIGFuZCB4aSB2YXJpYWJsZXMsIGFzIHdlbGwgYXMgdGhlIG1ldHJpY01hcCBtYXAgY29udGFpbiBkYXRhIGV4dHJhY3RlZCBmcm9tXG4gKiBUZVgsIFRlWCBmb250IG1ldHJpY3MsIGFuZCB0aGUgVFRGIGZpbGVzLiBUaGVzZSBkYXRhIGFyZSB0aGVuIGV4cG9zZWQgdmlhIHRoZVxuICogYG1ldHJpY3NgIHZhcmlhYmxlIGFuZCB0aGUgZ2V0Q2hhcmFjdGVyTWV0cmljcyBmdW5jdGlvbi5cbiAqL1xuLy8gSW4gVGVYLCB0aGVyZSBhcmUgYWN0dWFsbHkgdGhyZWUgc2V0cyBvZiBkaW1lbnNpb25zLCBvbmUgZm9yIGVhY2ggb2Zcbi8vIHRleHRzdHlsZSAoc2l6ZSBpbmRleCA1IGFuZCBoaWdoZXI6ID49OXB0KSwgc2NyaXB0c3R5bGUgKHNpemUgaW5kZXggMyBhbmQgNDpcbi8vIDctOHB0KSwgYW5kIHNjcmlwdHNjcmlwdHN0eWxlIChzaXplIGluZGV4IDEgYW5kIDI6IDUtNnB0KS4gIFRoZXNlIGFyZVxuLy8gcHJvdmlkZWQgaW4gdGhlIGFycmF5cyBiZWxvdywgaW4gdGhhdCBvcmRlci5cbi8vXG4vLyBUaGUgZm9udCBtZXRyaWNzIGFyZSBzdG9yZWQgaW4gZm9udHMgY21zeTEwLCBjbXN5NywgYW5kIGNtc3k1IHJlc3BlY3RpdmVseS5cbi8vIFRoaXMgd2FzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIHNjcmlwdDpcbi8vXG4vLyAgICAgbGF0ZXggLWludGVyYWN0aW9uPW5vbnN0b3Btb2RlIFxcXG4vLyAgICAgJ1xcZG9jdW1lbnRjbGFzc3thcnRpY2xlfVxcdXNlcGFja2FnZXthbXNtYXRofVxcYmVnaW57ZG9jdW1lbnR9JyBcXFxuLy8gICAgICckYSQgXFxleHBhbmRhZnRlclxcc2hvd1xcdGhlXFx0ZXh0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcZXhwYW5kYWZ0ZXJcXHNob3dcXHRoZVxcc2NyaXB0c2NyaXB0Zm9udDInIFxcXG4vLyAgICAgJ1xcc3RvcCdcbi8vXG4vLyBUaGUgbWV0cmljcyB0aGVtc2VsdmVzIHdlcmUgcmV0cmlldmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG4vL1xuLy8gICAgIHRmdG9wbCBjbXN5MTBcbi8vICAgICB0ZnRvcGwgY21zeTdcbi8vICAgICB0ZnRvcGwgY21zeTVcbi8vXG4vLyBUaGUgb3V0cHV0IG9mIGVhY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgcXVpdGUgbGVuZ3RoeS4gIFRoZSBvbmx5IHBhcnQgd2Vcbi8vIGNhcmUgYWJvdXQgaXMgdGhlIEZPTlRESU1FTiBzZWN0aW9uLiBFYWNoIHZhbHVlIGlzIG1lYXN1cmVkIGluIEVNcy5cbnZhciBzaWdtYXNBbmRYaXMgPSB7XG4gIHNsYW50OiBbMC4yNTAsIDAuMjUwLCAwLjI1MF0sXG4gIC8vIHNpZ21hMVxuICBzcGFjZTogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTJcbiAgc3RyZXRjaDogWzAuMDAwLCAwLjAwMCwgMC4wMDBdLFxuICAvLyBzaWdtYTNcbiAgc2hyaW5rOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hNFxuICB4SGVpZ2h0OiBbMC40MzEsIDAuNDMxLCAwLjQzMV0sXG4gIC8vIHNpZ21hNVxuICBxdWFkOiBbMS4wMDAsIDEuMTcxLCAxLjQ3Ml0sXG4gIC8vIHNpZ21hNlxuICBleHRyYVNwYWNlOiBbMC4wMDAsIDAuMDAwLCAwLjAwMF0sXG4gIC8vIHNpZ21hN1xuICBudW0xOiBbMC42NzcsIDAuNzMyLCAwLjkyNV0sXG4gIC8vIHNpZ21hOFxuICBudW0yOiBbMC4zOTQsIDAuMzg0LCAwLjM4N10sXG4gIC8vIHNpZ21hOVxuICBudW0zOiBbMC40NDQsIDAuNDcxLCAwLjUwNF0sXG4gIC8vIHNpZ21hMTBcbiAgZGVub20xOiBbMC42ODYsIDAuNzUyLCAxLjAyNV0sXG4gIC8vIHNpZ21hMTFcbiAgZGVub20yOiBbMC4zNDUsIDAuMzQ0LCAwLjUzMl0sXG4gIC8vIHNpZ21hMTJcbiAgc3VwMTogWzAuNDEzLCAwLjUwMywgMC41MDRdLFxuICAvLyBzaWdtYTEzXG4gIHN1cDI6IFswLjM2MywgMC40MzEsIDAuNDA0XSxcbiAgLy8gc2lnbWExNFxuICBzdXAzOiBbMC4yODksIDAuMjg2LCAwLjI5NF0sXG4gIC8vIHNpZ21hMTVcbiAgc3ViMTogWzAuMTUwLCAwLjE0MywgMC4yMDBdLFxuICAvLyBzaWdtYTE2XG4gIHN1YjI6IFswLjI0NywgMC4yODYsIDAuNDAwXSxcbiAgLy8gc2lnbWExN1xuICBzdXBEcm9wOiBbMC4zODYsIDAuMzUzLCAwLjQ5NF0sXG4gIC8vIHNpZ21hMThcbiAgc3ViRHJvcDogWzAuMDUwLCAwLjA3MSwgMC4xMDBdLFxuICAvLyBzaWdtYTE5XG4gIGRlbGltMTogWzIuMzkwLCAxLjcwMCwgMS45ODBdLFxuICAvLyBzaWdtYTIwXG4gIGRlbGltMjogWzEuMDEwLCAxLjE1NywgMS40MjBdLFxuICAvLyBzaWdtYTIxXG4gIGF4aXNIZWlnaHQ6IFswLjI1MCwgMC4yNTAsIDAuMjUwXSxcbiAgLy8gc2lnbWEyMlxuICAvLyBUaGVzZSBmb250IG1ldHJpY3MgYXJlIGV4dHJhY3RlZCBmcm9tIFRlWCBieSB1c2luZyB0ZnRvcGwgb24gY21leDEwLnRmbTtcbiAgLy8gdGhleSBjb3JyZXNwb25kIHRvIHRoZSBmb250IHBhcmFtZXRlcnMgb2YgdGhlIGV4dGVuc2lvbiBmb250cyAoZmFtaWx5IDMpLlxuICAvLyBTZWUgdGhlIFRlWGJvb2ssIHBhZ2UgNDQxLiBJbiBBTVNUZVgsIHRoZSBleHRlbnNpb24gZm9udHMgc2NhbGU7IHRvXG4gIC8vIG1hdGNoIGNtZXg3LCB3ZSdkIHVzZSBjbWV4Ny50Zm0gdmFsdWVzIGZvciBzY3JpcHQgYW5kIHNjcmlwdHNjcmlwdFxuICAvLyB2YWx1ZXMuXG4gIGRlZmF1bHRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNDksIDAuMDQ5XSxcbiAgLy8geGk4OyBjbWV4NzogMC4wNDlcbiAgYmlnT3BTcGFjaW5nMTogWzAuMTExLCAwLjExMSwgMC4xMTFdLFxuICAvLyB4aTlcbiAgYmlnT3BTcGFjaW5nMjogWzAuMTY2LCAwLjE2NiwgMC4xNjZdLFxuICAvLyB4aTEwXG4gIGJpZ09wU3BhY2luZzM6IFswLjIsIDAuMiwgMC4yXSxcbiAgLy8geGkxMVxuICBiaWdPcFNwYWNpbmc0OiBbMC42LCAwLjYxMSwgMC42MTFdLFxuICAvLyB4aTEyOyBjbWV4NzogMC42MTFcbiAgYmlnT3BTcGFjaW5nNTogWzAuMSwgMC4xNDMsIDAuMTQzXSxcbiAgLy8geGkxMzsgY21leDc6IDAuMTQzXG4gIC8vIFRoZSBcXHNxcnQgcnVsZSB3aWR0aCBpcyB0YWtlbiBmcm9tIHRoZSBoZWlnaHQgb2YgdGhlIHN1cmQgY2hhcmFjdGVyLlxuICAvLyBTaW5jZSB3ZSB1c2UgdGhlIHNhbWUgZm9udCBhdCBhbGwgc2l6ZXMsIHRoaXMgdGhpY2tuZXNzIGRvZXNuJ3Qgc2NhbGUuXG4gIHNxcnRSdWxlVGhpY2tuZXNzOiBbMC4wNCwgMC4wNCwgMC4wNF0sXG4gIC8vIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyBob3cgbGFyZ2UgYSBwdCBpcywgZm9yIG1ldHJpY3Mgd2hpY2ggYXJlIGRlZmluZWRcbiAgLy8gaW4gdGVybXMgb2YgcHRzLlxuICAvLyBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCBpbiBrYXRleC5sZXNzOyBpZiB5b3UgY2hhbmdlIGl0IG1ha2Ugc3VyZSB0aGVcbiAgLy8gdmFsdWVzIG1hdGNoLlxuICBwdFBlckVtOiBbMTAuMCwgMTAuMCwgMTAuMF0sXG4gIC8vIFRoZSBzcGFjZSBiZXR3ZWVuIGFkamFjZW50IGB8YCBjb2x1bW5zIGluIGFuIGFycmF5IGRlZmluaXRpb24uIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcZG91YmxlcnVsZXNlcGAgaW4gTGFUZVguIEVxdWFscyAyLjAgLyBwdFBlckVtLlxuICBkb3VibGVSdWxlU2VwOiBbMC4yLCAwLjIsIDAuMl0sXG4gIC8vIFRoZSB3aWR0aCBvZiBzZXBhcmF0b3IgbGluZXMgaW4ge2FycmF5fSBlbnZpcm9ubWVudHMuIEZyb21cbiAgLy8gYFxcc2hvd3RoZVxcYXJyYXlydWxld2lkdGhgIGluIExhVGVYLiBFcXVhbHMgMC40IC8gcHRQZXJFbS5cbiAgYXJyYXlSdWxlV2lkdGg6IFswLjA0LCAwLjA0LCAwLjA0XSxcbiAgLy8gVHdvIHZhbHVlcyBmcm9tIExhVGVYIHNvdXJjZTJlOlxuICBmYm94c2VwOiBbMC4zLCAwLjMsIDAuM10sXG4gIC8vICAgICAgICAzIHB0IC8gcHRQZXJFbVxuICBmYm94cnVsZTogWzAuMDQsIDAuMDQsIDAuMDRdIC8vIDAuNCBwdCAvIHB0UGVyRW1cblxufTsgLy8gVGhpcyBtYXAgY29udGFpbnMgYSBtYXBwaW5nIGZyb20gZm9udCBuYW1lIGFuZCBjaGFyYWN0ZXIgY29kZSB0byBjaGFyYWN0ZXJcbi8vIHNob3VsZCBoYXZlIExhdGluLTEgYW5kIEN5cmlsbGljIGNoYXJhY3RlcnMsIGJ1dCBtYXkgbm90IGRlcGVuZGluZyBvbiB0aGVcbi8vIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUgbWV0cmljcyBkbyBub3QgYWNjb3VudCBmb3IgZXh0cmEgaGVpZ2h0IGZyb20gdGhlXG4vLyBhY2NlbnRzLiAgSW4gdGhlIGNhc2Ugb2YgQ3lyaWxsaWMgY2hhcmFjdGVycyB3aGljaCBoYXZlIGJvdGggYXNjZW5kZXJzIGFuZFxuLy8gZGVzY2VuZGVycyB3ZSBwcmVmZXIgYXBwcm94aW1hdGlvbnMgd2l0aCBhc2NlbmRlcnMsIHByaW1hcmlseSB0byBwcmV2ZW50XG4vLyB0aGUgZnJhY3Rpb24gYmFyIG9yIHJvb3QgbGluZSBmcm9tIGludGVyc2VjdGluZyB0aGUgZ2x5cGguXG4vLyBUT0RPKGtldmluYikgYWxsb3cgdW5pb24gb2YgbXVsdGlwbGUgZ2x5cGggbWV0cmljcyBmb3IgYmV0dGVyIGFjY3VyYWN5LlxuXG52YXIgZXh0cmFDaGFyYWN0ZXJNYXAgPSB7XG4gIC8vIExhdGluLTFcbiAgJ8OFJzogJ0EnLFxuICAnw5AnOiAnRCcsXG4gICfDnic6ICdvJyxcbiAgJ8OlJzogJ2EnLFxuICAnw7AnOiAnZCcsXG4gICfDvic6ICdvJyxcbiAgLy8gQ3lyaWxsaWNcbiAgJ9CQJzogJ0EnLFxuICAn0JEnOiAnQicsXG4gICfQkic6ICdCJyxcbiAgJ9CTJzogJ0YnLFxuICAn0JQnOiAnQScsXG4gICfQlSc6ICdFJyxcbiAgJ9CWJzogJ0snLFxuICAn0JcnOiAnMycsXG4gICfQmCc6ICdOJyxcbiAgJ9CZJzogJ04nLFxuICAn0JonOiAnSycsXG4gICfQmyc6ICdOJyxcbiAgJ9CcJzogJ00nLFxuICAn0J0nOiAnSCcsXG4gICfQnic6ICdPJyxcbiAgJ9CfJzogJ04nLFxuICAn0KAnOiAnUCcsXG4gICfQoSc6ICdDJyxcbiAgJ9CiJzogJ1QnLFxuICAn0KMnOiAneScsXG4gICfQpCc6ICdPJyxcbiAgJ9ClJzogJ1gnLFxuICAn0KYnOiAnVScsXG4gICfQpyc6ICdoJyxcbiAgJ9CoJzogJ1cnLFxuICAn0KknOiAnVycsXG4gICfQqic6ICdCJyxcbiAgJ9CrJzogJ1gnLFxuICAn0KwnOiAnQicsXG4gICfQrSc6ICczJyxcbiAgJ9CuJzogJ1gnLFxuICAn0K8nOiAnUicsXG4gICfQsCc6ICdhJyxcbiAgJ9CxJzogJ2InLFxuICAn0LInOiAnYScsXG4gICfQsyc6ICdyJyxcbiAgJ9C0JzogJ3knLFxuICAn0LUnOiAnZScsXG4gICfQtic6ICdtJyxcbiAgJ9C3JzogJ2UnLFxuICAn0LgnOiAnbicsXG4gICfQuSc6ICduJyxcbiAgJ9C6JzogJ24nLFxuICAn0LsnOiAnbicsXG4gICfQvCc6ICdtJyxcbiAgJ9C9JzogJ24nLFxuICAn0L4nOiAnbycsXG4gICfQvyc6ICduJyxcbiAgJ9GAJzogJ3AnLFxuICAn0YEnOiAnYycsXG4gICfRgic6ICdvJyxcbiAgJ9GDJzogJ3knLFxuICAn0YQnOiAnYicsXG4gICfRhSc6ICd4JyxcbiAgJ9GGJzogJ24nLFxuICAn0YcnOiAnbicsXG4gICfRiCc6ICd3JyxcbiAgJ9GJJzogJ3cnLFxuICAn0YonOiAnYScsXG4gICfRiyc6ICdtJyxcbiAgJ9GMJzogJ2EnLFxuICAn0Y0nOiAnZScsXG4gICfRjic6ICdtJyxcbiAgJ9GPJzogJ3InXG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBuZXcgZm9udCBtZXRyaWNzIHRvIGRlZmF1bHQgbWV0cmljTWFwXG4gKiBJdCBjYW4gYWxzbyBvdmVycmlkZSBleGlzdGluZyBtZXRyaWNzXG4gKi9cbmZ1bmN0aW9uIHNldEZvbnRNZXRyaWNzKGZvbnROYW1lLCBtZXRyaWNzKSB7XG4gIGZvbnRNZXRyaWNzRGF0YVtmb250TmFtZV0gPSBtZXRyaWNzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gdGhlXG4gKiBtZXRyaWNNYXAgdGFibGUuIEl0IHRha2VzIGEgY2hhcmFjdGVyIGFzIGEgc3RyaW5nLCBhbmQgYSBmb250LlxuICpcbiAqIE5vdGU6IHRoZSBgd2lkdGhgIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQgaWYgZm9udE1ldHJpY3NEYXRhLmpzIHdhc24ndFxuICogYnVpbHQgdXNpbmcgYE1ha2UgZXh0ZW5kZWRfbWV0cmljc2AuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyTWV0cmljcyhjaGFyYWN0ZXIsIGZvbnQsIG1vZGUpIHtcbiAgaWYgKCFmb250TWV0cmljc0RhdGFbZm9udF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiBcIiArIGZvbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgY2ggPSBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0RhdGFbZm9udF1bY2hdO1xuXG4gIGlmICghbWV0cmljcyAmJiBjaGFyYWN0ZXJbMF0gaW4gZXh0cmFDaGFyYWN0ZXJNYXApIHtcbiAgICBjaCA9IGV4dHJhQ2hhcmFjdGVyTWFwW2NoYXJhY3RlclswXV0uY2hhckNvZGVBdCgwKTtcbiAgICBtZXRyaWNzID0gZm9udE1ldHJpY3NEYXRhW2ZvbnRdW2NoXTtcbiAgfVxuXG4gIGlmICghbWV0cmljcyAmJiBtb2RlID09PSAndGV4dCcpIHtcbiAgICAvLyBXZSBkb24ndCB0eXBpY2FsbHkgaGF2ZSBmb250IG1ldHJpY3MgZm9yIEFzaWFuIHNjcmlwdHMuXG4gICAgLy8gQnV0IHNpbmNlIHdlIHN1cHBvcnQgdGhlbSBpbiB0ZXh0IG1vZGUsIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gc29tZSBzb3J0IG9mIG1ldHJpY3MuXG4gICAgLy8gU28gaWYgdGhlIGNoYXJhY3RlciBpcyBpbiBhIHNjcmlwdCB3ZSBzdXBwb3J0IGJ1dCB3ZVxuICAgIC8vIGRvbid0IGhhdmUgbWV0cmljcyBmb3IgaXQsIGp1c3QgdXNlIHRoZSBtZXRyaWNzIGZvclxuICAgIC8vIHRoZSBMYXRpbiBjYXBpdGFsIGxldHRlciBNLiBUaGlzIGlzIGNsb3NlIGVub3VnaCBiZWNhdXNlXG4gICAgLy8gd2UgKGN1cnJlbnRseSkgb25seSBjYXJlIGFib3V0IHRoZSBoZWlnaHQgb2YgdGhlIGdseXBoXG4gICAgLy8gbm90IGl0cyB3aWR0aC5cbiAgICBpZiAoc3VwcG9ydGVkQ29kZXBvaW50KGNoKSkge1xuICAgICAgbWV0cmljcyA9IGZvbnRNZXRyaWNzRGF0YVtmb250XVs3N107IC8vIDc3IGlzIHRoZSBjaGFyY29kZSBmb3IgJ00nXG4gICAgfVxuICB9XG5cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IG1ldHJpY3NbMF0sXG4gICAgICBoZWlnaHQ6IG1ldHJpY3NbMV0sXG4gICAgICBpdGFsaWM6IG1ldHJpY3NbMl0sXG4gICAgICBza2V3OiBtZXRyaWNzWzNdLFxuICAgICAgd2lkdGg6IG1ldHJpY3NbNF1cbiAgICB9O1xuICB9XG59XG52YXIgZm9udE1ldHJpY3NCeVNpemVJbmRleCA9IHt9O1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgYSBnaXZlbiBzaXplLlxuICovXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE1ldHJpY3Moc2l6ZSkge1xuICB2YXIgc2l6ZUluZGV4O1xuXG4gIGlmIChzaXplID49IDUpIHtcbiAgICBzaXplSW5kZXggPSAwO1xuICB9IGVsc2UgaWYgKHNpemUgPj0gMykge1xuICAgIHNpemVJbmRleCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZUluZGV4ID0gMjtcbiAgfVxuXG4gIGlmICghZm9udE1ldHJpY3NCeVNpemVJbmRleFtzaXplSW5kZXhdKSB7XG4gICAgdmFyIG1ldHJpY3MgPSBmb250TWV0cmljc0J5U2l6ZUluZGV4W3NpemVJbmRleF0gPSB7XG4gICAgICBjc3NFbVBlck11OiBzaWdtYXNBbmRYaXMucXVhZFtzaXplSW5kZXhdIC8gMThcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNpZ21hc0FuZFhpcykge1xuICAgICAgaWYgKHNpZ21hc0FuZFhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIG1ldHJpY3Nba2V5XSA9IHNpZ21hc0FuZFhpc1trZXldW3NpemVJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvbnRNZXRyaWNzQnlTaXplSW5kZXhbc2l6ZUluZGV4XTtcbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wdGlvbnMgdGhhdCB0aGUgUGFyc2VyIGNhcnJpZXNcbiAqIGFyb3VuZCB3aXRoIGl0IHdoaWxlIHBhcnNpbmcuIERhdGEgaXMgaGVsZCBpbiBhbiBgT3B0aW9uc2Agb2JqZWN0LCBhbmQgd2hlblxuICogcmVjdXJzaW5nLCBhIG5ldyBgT3B0aW9uc2Agb2JqZWN0IGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGAud2l0aCpgIGFuZFxuICogYC5yZXNldGAgZnVuY3Rpb25zLlxuICovXG52YXIgc2l6ZVN0eWxlTWFwID0gWy8vIEVhY2ggZWxlbWVudCBjb250YWlucyBbdGV4dHNpemUsIHNjcmlwdHNpemUsIHNjcmlwdHNjcmlwdHNpemVdLlxuLy8gVGhlIHNpemUgbWFwcGluZ3MgYXJlIHRha2VuIGZyb20gVGVYIHdpdGggXFxub3JtYWxzaXplPTEwcHQuXG5bMSwgMSwgMV0sIC8vIHNpemUxOiBbNSwgNSwgNV0gICAgICAgICAgICAgIFxcdGlueVxuWzIsIDEsIDFdLCAvLyBzaXplMjogWzYsIDUsIDVdXG5bMywgMSwgMV0sIC8vIHNpemUzOiBbNywgNSwgNV0gICAgICAgICAgICAgIFxcc2NyaXB0c2l6ZVxuWzQsIDIsIDFdLCAvLyBzaXplNDogWzgsIDYsIDVdICAgICAgICAgICAgICBcXGZvb3Rub3Rlc2l6ZVxuWzUsIDIsIDFdLCAvLyBzaXplNTogWzksIDYsIDVdICAgICAgICAgICAgICBcXHNtYWxsXG5bNiwgMywgMV0sIC8vIHNpemU2OiBbMTAsIDcsIDVdICAgICAgICAgICAgIFxcbm9ybWFsc2l6ZVxuWzcsIDQsIDJdLCAvLyBzaXplNzogWzEyLCA4LCA2XSAgICAgICAgICAgICBcXGxhcmdlXG5bOCwgNiwgM10sIC8vIHNpemU4OiBbMTQuNCwgMTAsIDddICAgICAgICAgIFxcTGFyZ2Vcbls5LCA3LCA2XSwgLy8gc2l6ZTk6IFsxNy4yOCwgMTIsIDEwXSAgICAgICAgXFxMQVJHRVxuWzEwLCA4LCA3XSwgLy8gc2l6ZTEwOiBbMjAuNzQsIDE0LjQsIDEyXSAgICAgXFxodWdlXG5bMTEsIDEwLCA5XSAvLyBzaXplMTE6IFsyNC44OCwgMjAuNzQsIDE3LjI4XSBcXEhVR0Vcbl07XG52YXIgc2l6ZU11bHRpcGxpZXJzID0gWy8vIGZvbnRNZXRyaWNzLmpzOmdldEdsb2JhbE1ldHJpY3MgYWxzbyB1c2VzIHNpemUgaW5kZXhlcywgc28gaWZcbi8vIHlvdSBjaGFuZ2Ugc2l6ZSBpbmRleGVzLCBjaGFuZ2UgdGhhdCBmdW5jdGlvbi5cbjAuNSwgMC42LCAwLjcsIDAuOCwgMC45LCAxLjAsIDEuMiwgMS40NCwgMS43MjgsIDIuMDc0LCAyLjQ4OF07XG5cbnZhciBzaXplQXRTdHlsZSA9IGZ1bmN0aW9uIHNpemVBdFN0eWxlKHNpemUsIHN0eWxlKSB7XG4gIHJldHVybiBzdHlsZS5zaXplIDwgMiA/IHNpemUgOiBzaXplU3R5bGVNYXBbc2l6ZSAtIDFdW3N0eWxlLnNpemUgLSAxXTtcbn07IC8vIEluIHRoZXNlIHR5cGVzLCBcIlwiIChlbXB0eSBzdHJpbmcpIG1lYW5zIFwibm8gY2hhbmdlXCIuXG5cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBtYWluIG9wdGlvbnMgY2xhc3MuIEl0IGNvbnRhaW5zIHRoZSBjdXJyZW50IHN0eWxlLCBzaXplLCBjb2xvcixcbiAqIGFuZCBmb250LlxuICpcbiAqIE9wdGlvbnMgb2JqZWN0cyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiBUbyBjcmVhdGUgYSBuZXcgT3B0aW9ucyB3aXRoXG4gKiBkaWZmZXJlbnQgcHJvcGVydGllcywgY2FsbCBhIGAuaGF2aW5nKmAgbWV0aG9kLlxuICovXG5jbGFzcyBPcHRpb25zIHtcbiAgLy8gQSBmb250IGZhbWlseSBhcHBsaWVzIHRvIGEgZ3JvdXAgb2YgZm9udHMgKGkuZS4gU2Fuc1NlcmlmKSwgd2hpbGUgYSBmb250XG4gIC8vIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBmb250IChpLmUuIFNhbnNTZXJpZiBCb2xkKS5cbiAgLy8gU2VlOiBodHRwczovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIzNTAvZGlmZmVyZW5jZS1iZXR3ZWVuLXRleHRybS1hbmQtbWF0aHJtXG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIHNpemUgaW5kZXguXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbG9yID0gdm9pZCAwO1xuICAgIHRoaXMuc2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMucGhhbnRvbSA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnQgPSB2b2lkIDA7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gdm9pZCAwO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmZvbnRTaGFwZSA9IHZvaWQgMDtcbiAgICB0aGlzLnNpemVNdWx0aXBsaWVyID0gdm9pZCAwO1xuICAgIHRoaXMubWF4U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLm1pblJ1bGVUaGlja25lc3MgPSB2b2lkIDA7XG4gICAgdGhpcy5fZm9udE1ldHJpY3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IGRhdGEuc3R5bGU7XG4gICAgdGhpcy5jb2xvciA9IGRhdGEuY29sb3I7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplIHx8IE9wdGlvbnMuQkFTRVNJWkU7XG4gICAgdGhpcy50ZXh0U2l6ZSA9IGRhdGEudGV4dFNpemUgfHwgdGhpcy5zaXplO1xuICAgIHRoaXMucGhhbnRvbSA9ICEhZGF0YS5waGFudG9tO1xuICAgIHRoaXMuZm9udCA9IGRhdGEuZm9udCB8fCBcIlwiO1xuICAgIHRoaXMuZm9udEZhbWlseSA9IGRhdGEuZm9udEZhbWlseSB8fCBcIlwiO1xuICAgIHRoaXMuZm9udFdlaWdodCA9IGRhdGEuZm9udFdlaWdodCB8fCAnJztcbiAgICB0aGlzLmZvbnRTaGFwZSA9IGRhdGEuZm9udFNoYXBlIHx8ICcnO1xuICAgIHRoaXMuc2l6ZU11bHRpcGxpZXIgPSBzaXplTXVsdGlwbGllcnNbdGhpcy5zaXplIC0gMV07XG4gICAgdGhpcy5tYXhTaXplID0gZGF0YS5tYXhTaXplO1xuICAgIHRoaXMubWluUnVsZVRoaWNrbmVzcyA9IGRhdGEubWluUnVsZVRoaWNrbmVzcztcbiAgICB0aGlzLl9mb250TWV0cmljcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgXCJ0aGlzXCIuICBQcm9wZXJ0aWVzXG4gICAqIGZyb20gXCJleHRlbnNpb25cIiB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cblxuXG4gIGV4dGVuZChleHRlbnNpb24pIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgdGV4dFNpemU6IHRoaXMudGV4dFNpemUsXG4gICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgIHBoYW50b206IHRoaXMucGhhbnRvbSxcbiAgICAgIGZvbnQ6IHRoaXMuZm9udCxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZm9udFdlaWdodCxcbiAgICAgIGZvbnRTaGFwZTogdGhpcy5mb250U2hhcGUsXG4gICAgICBtYXhTaXplOiB0aGlzLm1heFNpemUsXG4gICAgICBtaW5SdWxlVGhpY2tuZXNzOiB0aGlzLm1pblJ1bGVUaGlja25lc3NcbiAgICB9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4dGVuc2lvbikge1xuICAgICAgaWYgKGV4dGVuc2lvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IGV4dGVuc2lvbltrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3B0aW9ucyhkYXRhKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHN0eWxlLiBJZiBgdGhpcy5zdHlsZSA9PT0gc3R5bGVgLFxuICAgKiByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdTdHlsZShzdHlsZSkge1xuICAgIGlmICh0aGlzLnN0eWxlID09PSBzdHlsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2l6ZTogc2l6ZUF0U3R5bGUodGhpcy50ZXh0U2l6ZSwgc3R5bGUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb25zIG9iamVjdCB3aXRoIGEgY3JhbXBlZCB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IHN0eWxlLiBJZlxuICAgKiB0aGUgY3VycmVudCBzdHlsZSBpcyBjcmFtcGVkLCByZXR1cm5zIGB0aGlzYC5cbiAgICovXG5cblxuICBoYXZpbmdDcmFtcGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYW5kIGluIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqIFJldHVybnMgYHRoaXNgIGlmIGFwcHJvcHJpYXRlLlxuICAgKi9cblxuXG4gIGhhdmluZ1NpemUoc2l6ZSkge1xuICAgIGlmICh0aGlzLnNpemUgPT09IHNpemUgJiYgdGhpcy50ZXh0U2l6ZSA9PT0gc2l6ZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLnRleHQoKSxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgIHNpemVNdWx0aXBsaWVyOiBzaXplTXVsdGlwbGllcnNbc2l6ZSAtIDFdXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExpa2UgYHRoaXMuaGF2aW5nU2l6ZShCQVNFU0laRSkuaGF2aW5nU3R5bGUoc3R5bGUpYC4gSWYgYHN0eWxlYCBpcyBvbWl0dGVkLFxuICAgKiBjaGFuZ2VzIHRvIGF0IGxlYXN0IGBcXHRleHRzdHlsZWAuXG4gICAqL1xuXG5cbiAgaGF2aW5nQmFzZVN0eWxlKHN0eWxlKSB7XG4gICAgc3R5bGUgPSBzdHlsZSB8fCB0aGlzLnN0eWxlLnRleHQoKTtcbiAgICB2YXIgd2FudFNpemUgPSBzaXplQXRTdHlsZShPcHRpb25zLkJBU0VTSVpFLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy5zaXplID09PSB3YW50U2l6ZSAmJiB0aGlzLnRleHRTaXplID09PSBPcHRpb25zLkJBU0VTSVpFICYmIHRoaXMuc3R5bGUgPT09IHN0eWxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaXplOiB3YW50U2l6ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGVmZmVjdCBvZiBzaXppbmcgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgICogS2VlcCB0aGUgZWZmZWN0IG9mIHRoZSBjdXJyZW50IHN0eWxlLCBzdWNoIGFzIFxcc2NyaXB0c3R5bGUuXG4gICAqL1xuXG5cbiAgaGF2aW5nQmFzZVNpemluZygpIHtcbiAgICB2YXIgc2l6ZTtcblxuICAgIHN3aXRjaCAodGhpcy5zdHlsZS5pZCkge1xuICAgICAgY2FzZSA0OlxuICAgICAgY2FzZSA1OlxuICAgICAgICBzaXplID0gMzsgLy8gbm9ybWFsc2l6ZSBpbiBzY3JpcHRzdHlsZVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDc6XG4gICAgICAgIHNpemUgPSAxOyAvLyBub3JtYWxzaXplIGluIHNjcmlwdHNjcmlwdHN0eWxlXG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNpemUgPSA2O1xuICAgICAgLy8gbm9ybWFsc2l6ZSBpbiB0ZXh0c3R5bGUgb3IgZGlzcGxheXN0eWxlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHN0eWxlOiB0aGlzLnN0eWxlLnRleHQoKSxcbiAgICAgIHNpemU6IHNpemVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGNvbG9yLlxuICAgKi9cblxuXG4gIHdpdGhDb2xvcihjb2xvcikge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggXCJwaGFudG9tXCIgc2V0IHRvIHRydWUuXG4gICAqL1xuXG5cbiAgd2l0aFBoYW50b20oKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIHBoYW50b206IHRydWVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvcHRpb25zIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBtYXRoIGZvbnQgb3Igb2xkIHRleHQgZm9udC5cbiAgICogQHR5cGUge1t0eXBlXX1cbiAgICovXG5cblxuICB3aXRoRm9udChmb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9wdGlvbnMgb2JqZWN0cyB3aXRoIHRoZSBnaXZlbiBmb250RmFtaWx5LlxuICAgKi9cblxuXG4gIHdpdGhUZXh0Rm9udEZhbWlseShmb250RmFtaWx5KSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250OiBcIlwiXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb3B0aW9ucyBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gZm9udCB3ZWlnaHRcbiAgICovXG5cblxuICB3aXRoVGV4dEZvbnRXZWlnaHQoZm9udFdlaWdodCkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZCh7XG4gICAgICBmb250V2VpZ2h0LFxuICAgICAgZm9udDogXCJcIlxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG9wdGlvbnMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGZvbnQgd2VpZ2h0XG4gICAqL1xuXG5cbiAgd2l0aFRleHRGb250U2hhcGUoZm9udFNoYXBlKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kKHtcbiAgICAgIGZvbnRTaGFwZSxcbiAgICAgIGZvbnQ6IFwiXCJcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBDU1Mgc2l6aW5nIGNsYXNzZXMgcmVxdWlyZWQgdG8gc3dpdGNoIGZyb20gZW5jbG9zaW5nIG9wdGlvbnNcbiAgICogYG9sZE9wdGlvbnNgIHRvIGB0aGlzYC4gUmV0dXJucyBhbiBhcnJheSBvZiBjbGFzc2VzLlxuICAgKi9cblxuXG4gIHNpemluZ0NsYXNzZXMob2xkT3B0aW9ucykge1xuICAgIGlmIChvbGRPcHRpb25zLnNpemUgIT09IHRoaXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIFtcInNpemluZ1wiLCBcInJlc2V0LXNpemVcIiArIG9sZE9wdGlvbnMuc2l6ZSwgXCJzaXplXCIgKyB0aGlzLnNpemVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIENTUyBzaXppbmcgY2xhc3NlcyByZXF1aXJlZCB0byBzd2l0Y2ggdG8gdGhlIGJhc2Ugc2l6ZS4gTGlrZVxuICAgKiBgdGhpcy5oYXZpbmdTaXplKEJBU0VTSVpFKS5zaXppbmdDbGFzc2VzKHRoaXMpYC5cbiAgICovXG5cblxuICBiYXNlU2l6aW5nQ2xhc3NlcygpIHtcbiAgICBpZiAodGhpcy5zaXplICE9PSBPcHRpb25zLkJBU0VTSVpFKSB7XG4gICAgICByZXR1cm4gW1wic2l6aW5nXCIsIFwicmVzZXQtc2l6ZVwiICsgdGhpcy5zaXplLCBcInNpemVcIiArIE9wdGlvbnMuQkFTRVNJWkVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBzaXplLlxuICAgKi9cblxuXG4gIGZvbnRNZXRyaWNzKCkge1xuICAgIGlmICghdGhpcy5fZm9udE1ldHJpY3MpIHtcbiAgICAgIHRoaXMuX2ZvbnRNZXRyaWNzID0gZ2V0R2xvYmFsTWV0cmljcyh0aGlzLnNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mb250TWV0cmljcztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgQ1NTIGNvbG9yIG9mIHRoZSBjdXJyZW50IG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuXG5cbiAgZ2V0Q29sb3IoKSB7XG4gICAgaWYgKHRoaXMucGhhbnRvbSkge1xuICAgICAgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gICAgfVxuICB9XG5cbn1cblxuT3B0aW9ucy5CQVNFU0laRSA9IDY7XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgY29udmVyc2lvbiBiZXR3ZWVuIHVuaXRzLiAgSW4gcGFydGljdWxhciwgaXQgcHJvdmlkZXNcbiAqIGNhbGN1bGF0ZVNpemUgdG8gY29udmVydCBvdGhlciB1bml0cyBpbnRvIGVtcy5cbiAqL1xuLy8gVGh1cywgbXVsdGlwbHlpbmcgYSBsZW5ndGggYnkgdGhpcyBudW1iZXIgY29udmVydHMgdGhlIGxlbmd0aCBmcm9tIHVuaXRzXG4vLyBpbnRvIHB0cy4gIERpdmlkaW5nIHRoZSByZXN1bHQgYnkgcHRQZXJFbSBnaXZlcyB0aGUgbnVtYmVyIG9mIGVtc1xuLy8gKmFzc3VtaW5nKiBhIGZvbnQgc2l6ZSBvZiBwdFBlckVtIChub3JtYWwgc2l6ZSwgbm9ybWFsIHN0eWxlKS5cblxudmFyIHB0UGVyVW5pdCA9IHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvTGFUZVgvTGVuZ3RocyBhbmRcbiAgLy8gaHR0cHM6Ly90ZXguc3RhY2tleGNoYW5nZS5jb20vYS84MjYzXG4gIFwicHRcIjogMSxcbiAgLy8gVGVYIHBvaW50XG4gIFwibW1cIjogNzIyNyAvIDI1NDAsXG4gIC8vIG1pbGxpbWV0ZXJcbiAgXCJjbVwiOiA3MjI3IC8gMjU0LFxuICAvLyBjZW50aW1ldGVyXG4gIFwiaW5cIjogNzIuMjcsXG4gIC8vIGluY2hcbiAgXCJicFwiOiA4MDMgLyA4MDAsXG4gIC8vIGJpZyAoUG9zdFNjcmlwdCkgcG9pbnRzXG4gIFwicGNcIjogMTIsXG4gIC8vIHBpY2FcbiAgXCJkZFwiOiAxMjM4IC8gMTE1NyxcbiAgLy8gZGlkb3RcbiAgXCJjY1wiOiAxNDg1NiAvIDExNTcsXG4gIC8vIGNpY2VybyAoMTIgZGlkb3QpXG4gIFwibmRcIjogNjg1IC8gNjQyLFxuICAvLyBuZXcgZGlkb3RcbiAgXCJuY1wiOiAxMzcwIC8gMTA3LFxuICAvLyBuZXcgY2ljZXJvICgxMiBuZXcgZGlkb3QpXG4gIFwic3BcIjogMSAvIDY1NTM2LFxuICAvLyBzY2FsZWQgcG9pbnQgKFRlWCdzIGludGVybmFsIHNtYWxsZXN0IHVuaXQpXG4gIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvNDEzNzFcbiAgXCJweFwiOiA4MDMgLyA4MDAgLy8gXFxwZGZweGRpbWVuIGRlZmF1bHRzIHRvIDEgYnAgaW4gcGRmVGVYIGFuZCBMdWFUZVhcblxufTsgLy8gRGljdGlvbmFyeSBvZiByZWxhdGl2ZSB1bml0cywgZm9yIGZhc3QgdmFsaWRpdHkgdGVzdGluZy5cblxudmFyIHJlbGF0aXZlVW5pdCA9IHtcbiAgXCJleFwiOiB0cnVlLFxuICBcImVtXCI6IHRydWUsXG4gIFwibXVcIjogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc3BlY2lmaWVkIHVuaXQgKGVpdGhlciBhIHN0cmluZyBkZWZpbmluZyB0aGUgdW5pdFxuICogb3IgYSBcInNpemVcIiBwYXJzZSBub2RlIGNvbnRhaW5pbmcgYSB1bml0IGZpZWxkKSBpcyB2YWxpZC5cbiAqL1xudmFyIHZhbGlkVW5pdCA9IGZ1bmN0aW9uIHZhbGlkVW5pdCh1bml0KSB7XG4gIGlmICh0eXBlb2YgdW5pdCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHVuaXQgPSB1bml0LnVuaXQ7XG4gIH1cblxuICByZXR1cm4gdW5pdCBpbiBwdFBlclVuaXQgfHwgdW5pdCBpbiByZWxhdGl2ZVVuaXQgfHwgdW5pdCA9PT0gXCJleFwiO1xufTtcbi8qXG4gKiBDb252ZXJ0IGEgXCJzaXplXCIgcGFyc2Ugbm9kZSAod2l0aCBudW1lcmljIFwibnVtYmVyXCIgYW5kIHN0cmluZyBcInVuaXRcIiBmaWVsZHMsXG4gKiBhcyBwYXJzZWQgYnkgZnVuY3Rpb25zLmpzIGFyZ1R5cGUgXCJzaXplXCIpIGludG8gYSBDU1MgZW0gdmFsdWUgZm9yIHRoZVxuICogY3VycmVudCBzdHlsZS9zY2FsZS4gIGBvcHRpb25zYCBnaXZlcyB0aGUgY3VycmVudCBvcHRpb25zLlxuICovXG5cbnZhciBjYWxjdWxhdGVTaXplID0gZnVuY3Rpb24gY2FsY3VsYXRlU2l6ZShzaXplVmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHNjYWxlO1xuXG4gIGlmIChzaXplVmFsdWUudW5pdCBpbiBwdFBlclVuaXQpIHtcbiAgICAvLyBBYnNvbHV0ZSB1bml0c1xuICAgIHNjYWxlID0gcHRQZXJVbml0W3NpemVWYWx1ZS51bml0XSAvLyBDb252ZXJ0IHVuaXQgdG8gcHRcbiAgICAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtIC8vIENvbnZlcnQgcHQgdG8gQ1NTIGVtXG4gICAgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBVbnNjYWxlIHRvIG1ha2UgYWJzb2x1dGUgdW5pdHNcbiAgfSBlbHNlIGlmIChzaXplVmFsdWUudW5pdCA9PT0gXCJtdVwiKSB7XG4gICAgLy8gYG11YCB1bml0cyBzY2FsZSB3aXRoIHNjcmlwdHN0eWxlL3NjcmlwdHNjcmlwdHN0eWxlLlxuICAgIHNjYWxlID0gb3B0aW9ucy5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXIgcmVsYXRpdmUgdW5pdHMgYWx3YXlzIHJlZmVyIHRvIHRoZSAqdGV4dHN0eWxlKiBmb250XG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgc2l6ZS5cbiAgICB2YXIgdW5pdE9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pc1RpZ2h0KCkpIHtcbiAgICAgIC8vIGlzVGlnaHQoKSBtZWFucyBjdXJyZW50IHN0eWxlIGlzIHNjcmlwdC9zY3JpcHRzY3JpcHQuXG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bml0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSAvLyBUT0RPOiBJbiBUZVggdGhlc2UgdW5pdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBxdWFkIG9mIHRoZSBjdXJyZW50XG4gICAgLy8gKnRleHQqIGZvbnQsIGUuZy4gY21yMTAuIEthVGVYIGluc3RlYWQgdXNlcyB2YWx1ZXMgZnJvbSB0aGVcbiAgICAvLyBjb21wYXJhYmx5LXNpemVkICpDb21wdXRlciBNb2Rlcm4gc3ltYm9sKiBmb250LiBBdCAxMHB0LCB0aGVzZVxuICAgIC8vIG1hdGNoLiBBdCA3cHQgYW5kIDVwdCwgdGhleSBkaWZmZXI6IGNtcjc9MS4xMzg4OTQsIGNtc3k3PTEuMTcwNjQxO1xuICAgIC8vIGNtcjU9MS4zNjExMzMsIGNtc3k1PTEuNDcyMjQxLiBDb25zaWRlciAkXFxzY3JpcHRzaXplIGFcXGtlcm4xZW1iJC5cbiAgICAvLyBUZVggXFxzaG93bGlzdHMgc2hvd3MgYSBrZXJuIG9mIDEuMTM4ODkgKiBmb250c2l6ZTtcbiAgICAvLyBLYVRlWCBzaG93cyBhIGtlcm4gb2YgMS4xNzEgKiBmb250c2l6ZS5cblxuXG4gICAgaWYgKHNpemVWYWx1ZS51bml0ID09PSBcImV4XCIpIHtcbiAgICAgIHNjYWxlID0gdW5pdE9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAoc2l6ZVZhbHVlLnVuaXQgPT09IFwiZW1cIikge1xuICAgICAgc2NhbGUgPSB1bml0T3B0aW9ucy5mb250TWV0cmljcygpLnF1YWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCB1bml0OiAnXCIgKyBzaXplVmFsdWUudW5pdCArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodW5pdE9wdGlvbnMgIT09IG9wdGlvbnMpIHtcbiAgICAgIHNjYWxlICo9IHVuaXRPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTWF0aC5taW4oc2l6ZVZhbHVlLm51bWJlciAqIHNjYWxlLCBvcHRpb25zLm1heFNpemUpO1xufTtcbi8qKlxuICogUm91bmQgYG5gIHRvIDQgZGVjaW1hbCBwbGFjZXMsIG9yIHRvIHRoZSBuZWFyZXN0IDEvMTAsMDAwdGggZW0uIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL0thVGVYL0thVGVYL3B1bGwvMjQ2MC5cbiAqL1xuXG52YXIgbWFrZUVtID0gZnVuY3Rpb24gbWFrZUVtKG4pIHtcbiAgcmV0dXJuICtuLnRvRml4ZWQoNCkgKyBcImVtXCI7XG59O1xuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgdGhlIGRhdGEgYWJvdXQgdGhlIERPTSBub2RlcyB3ZSBjcmVhdGUsIGFzIHdlbGwgYXMgc29tZVxuICogZXh0cmEgZGF0YS4gVGhleSBjYW4gdGhlbiBiZSB0cmFuc2Zvcm1lZCBpbnRvIHJlYWwgRE9NIG5vZGVzIHdpdGggdGhlXG4gKiBgdG9Ob2RlYCBmdW5jdGlvbiBvciBIVE1MIG1hcmt1cCB1c2luZyBgdG9NYXJrdXBgLiBUaGV5IGFyZSB1c2VmdWwgZm9yIGJvdGhcbiAqIHN0b3JpbmcgZXh0cmEgcHJvcGVydGllcyBvbiB0aGUgbm9kZXMsIGFzIHdlbGwgYXMgcHJvdmlkaW5nIGEgd2F5IHRvIGVhc2lseVxuICogd29yayB3aXRoIHRoZSBET00uXG4gKlxuICogU2ltaWxhciBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBNYXRoTUwgbm9kZXMgZXhpc3QgaW4gbWF0aE1MVHJlZS5qcy5cbiAqXG4gKiBUT0RPOiByZWZhY3RvciBgc3BhbmAgYW5kIGBhbmNob3JgIGludG8gY29tbW9uIHN1cGVyY2xhc3Mgd2hlblxuICogdGFyZ2V0IGVudmlyb25tZW50cyBzdXBwb3J0IGNsYXNzIGluaGVyaXRhbmNlXG4gKi9cblxuLyoqXG4gKiBDcmVhdGUgYW4gSFRNTCBjbGFzc05hbWUgYmFzZWQgb24gYSBsaXN0IG9mIGNsYXNzZXMuIEluIGFkZGl0aW9uIHRvIGpvaW5pbmdcbiAqIHdpdGggc3BhY2VzLCB3ZSBhbHNvIHJlbW92ZSBlbXB0eSBjbGFzc2VzLlxuICovXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiBjcmVhdGVDbGFzcyhjbGFzc2VzKSB7XG4gIHJldHVybiBjbGFzc2VzLmZpbHRlcihjbHMgPT4gY2xzKS5qb2luKFwiIFwiKTtcbn07XG5cbnZhciBpbml0Tm9kZSA9IGZ1bmN0aW9uIGluaXROb2RlKGNsYXNzZXMsIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgfHwgW107XG4gIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMuZGVwdGggPSAwO1xuICB0aGlzLm1heEZvbnRTaXplID0gMDtcbiAgdGhpcy5zdHlsZSA9IHN0eWxlIHx8IHt9O1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuc3R5bGUuaXNUaWdodCgpKSB7XG4gICAgICB0aGlzLmNsYXNzZXMucHVzaChcIm10aWdodFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3IgPSBvcHRpb25zLmdldENvbG9yKCk7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIHRoaXMuc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cbn07XG4vKipcbiAqIENvbnZlcnQgaW50byBhbiBIVE1MIG5vZGVcbiAqL1xuXG5cbnZhciB0b05vZGUgPSBmdW5jdGlvbiB0b05vZGUodGFnTmFtZSkge1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7IC8vIEFwcGx5IHRoZSBjbGFzc1xuXG4gIG5vZGUuY2xhc3NOYW1lID0gY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKTsgLy8gQXBwbHkgaW5saW5lIHN0eWxlc1xuXG4gIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHNlZW0gdG8gdW5kZXJzdGFuZCBzcGFuLnN0eWxlJ3MgdHlwZS5cbiAgICAgIG5vZGUuc3R5bGVbc3R5bGVdID0gdGhpcy5zdHlsZVtzdHlsZV07XG4gICAgfVxuICB9IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuXG4gIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiwgYWxzbyBhcyBIVE1MIG5vZGVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nXG4gKi9cblxuXG52YXIgdG9NYXJrdXAgPSBmdW5jdGlvbiB0b01hcmt1cCh0YWdOYW1lKSB7XG4gIHZhciBtYXJrdXAgPSBcIjxcIiArIHRhZ05hbWU7IC8vIEFkZCB0aGUgY2xhc3NcblxuICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCIgKyB1dGlscy5lc2NhcGUoY3JlYXRlQ2xhc3ModGhpcy5jbGFzc2VzKSkgKyBcIlxcXCJcIjtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBcIlwiOyAvLyBBZGQgdGhlIHN0eWxlcywgYWZ0ZXIgaHlwaGVuYXRpb25cblxuICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzKSB7XG4gICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gIH0gLy8gQWRkIHRoZSBhdHRyaWJ1dGVzXG5cblxuICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgIG1hcmt1cCArPSBcIiBcIiArIGF0dHIgKyBcIj1cXFwiXCIgKyB1dGlscy5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2F0dHJdKSArIFwiXFxcIlwiO1xuICAgIH1cbiAgfVxuXG4gIG1hcmt1cCArPSBcIj5cIjsgLy8gQWRkIHRoZSBtYXJrdXAgb2YgdGhlIGNoaWxkcmVuLCBhbHNvIGFzIG1hcmt1cFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIG1hcmt1cCArPSB0aGlzLmNoaWxkcmVuW2ldLnRvTWFya3VwKCk7XG4gIH1cblxuICBtYXJrdXAgKz0gXCI8L1wiICsgdGFnTmFtZSArIFwiPlwiO1xuICByZXR1cm4gbWFya3VwO1xufTsgLy8gTWFraW5nIHRoZSB0eXBlIGJlbG93IGV4YWN0IHdpdGggYWxsIG9wdGlvbmFsIGZpZWxkcyBkb2Vzbid0IHdvcmsgZHVlIHRvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80NTgyXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy81Njg4XG4vLyBIb3dldmVyLCBzaW5jZSAqYWxsKiBmaWVsZHMgYXJlIG9wdGlvbmFsLCAkU2hhcGU8PiB3b3JrcyBhcyBzdWdnZXN0ZWQgaW4gNTY4OFxuLy8gYWJvdmUuXG4vLyBUaGlzIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBhbGwgQ1NTIHByb3BlcnRpZXMuIEFkZGl0aW9uYWwgcHJvcGVydGllcyBzaG91bGRcbi8vIGJlIGFkZGVkIGFzIG5lZWRlZC5cblxuXG4vKipcbiAqIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgc3BhbiBub2RlLCB3aXRoIGEgY2xhc3NOYW1lLCBhIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZFxuICogYW4gaW5saW5lIHN0eWxlLiBJdCBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGl0cyBoZWlnaHQsIGRlcHRoLCBhbmRcbiAqIG1heEZvbnRTaXplLlxuICpcbiAqIFJlcHJlc2VudHMgdHdvIHR5cGVzIHdpdGggZGlmZmVyZW50IHVzZXM6IFN2Z1NwYW4gdG8gd3JhcCBhbiBTVkcgYW5kIERvbVNwYW5cbiAqIG90aGVyd2lzZS4gVGhpcyB0eXBlc2FmZXR5IGlzIGltcG9ydGFudCB3aGVuIEhUTUwgYnVpbGRlcnMgYWNjZXNzIGEgc3BhbidzXG4gKiBjaGlsZHJlbi5cbiAqL1xuY2xhc3MgU3BhbiB7XG4gIGNvbnN0cnVjdG9yKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB2b2lkIDA7XG4gICAgdGhpcy5tYXhGb250U2l6ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIGluaXROb2RlLmNhbGwodGhpcywgY2xhc3Nlcywgb3B0aW9ucywgc3R5bGUpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhbiBhcmJpdHJhcnkgYXR0cmlidXRlIG9uIHRoZSBzcGFuLiBXYXJuaW5nOiB1c2UgdGhpcyB3aXNlbHkuIE5vdFxuICAgKiBhbGwgYnJvd3NlcnMgc3VwcG9ydCBhdHRyaWJ1dGVzIHRoZSBzYW1lLCBhbmQgaGF2aW5nIHRvbyBtYW55IGN1c3RvbVxuICAgKiBhdHRyaWJ1dGVzIGlzIHByb2JhYmx5IGJhZC5cbiAgICovXG5cblxuICBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gdmFsdWU7XG4gIH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gdXRpbHMuY29udGFpbnModGhpcy5jbGFzc2VzLCBjbGFzc05hbWUpO1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHJldHVybiB0b05vZGUuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICByZXR1cm4gdG9NYXJrdXAuY2FsbCh0aGlzLCBcInNwYW5cIik7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhbiBhbmNob3IgKDxhPikgZWxlbWVudCB3aXRoIGEgaHlwZXJsaW5rLiAgU2VlIGBzcGFuYFxuICogZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiAqL1xuXG5jbGFzcyBBbmNob3Ige1xuICBjb25zdHJ1Y3RvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICBpbml0Tm9kZS5jYWxsKHRoaXMsIGNsYXNzZXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHV0aWxzLmNvbnRhaW5zKHRoaXMuY2xhc3NlcywgY2xhc3NOYW1lKTtcbiAgfVxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gdG9Ob2RlLmNhbGwodGhpcywgXCJhXCIpO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgcmV0dXJuIHRvTWFya3VwLmNhbGwodGhpcywgXCJhXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYW4gaW1hZ2UgZW1iZWQgKDxpbWc+KSBlbGVtZW50LlxuICovXG5cbmNsYXNzIEltZyB7XG4gIGNvbnN0cnVjdG9yKHNyYywgYWx0LCBzdHlsZSkge1xuICAgIHRoaXMuc3JjID0gdm9pZCAwO1xuICAgIHRoaXMuYWx0ID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmhlaWdodCA9IHZvaWQgMDtcbiAgICB0aGlzLmRlcHRoID0gdm9pZCAwO1xuICAgIHRoaXMubWF4Rm9udFNpemUgPSB2b2lkIDA7XG4gICAgdGhpcy5zdHlsZSA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdCA9IGFsdDtcbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB0aGlzLmNsYXNzZXMgPSBbXCJtb3JkXCJdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICAgIG5vZGUuc3JjID0gdGhpcy5zcmM7XG4gICAgbm9kZS5hbHQgPSB0aGlzLmFsdDtcbiAgICBub2RlLmNsYXNzTmFtZSA9IFwibW9yZFwiOyAvLyBBcHBseSBpbmxpbmUgc3R5bGVzXG5cbiAgICBmb3IgKHZhciBzdHlsZSBpbiB0aGlzLnN0eWxlKSB7XG4gICAgICBpZiAodGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBub2RlLnN0eWxlW3N0eWxlXSA9IHRoaXMuc3R5bGVbc3R5bGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9NYXJrdXAoKSB7XG4gICAgdmFyIG1hcmt1cCA9IFwiPGltZyAgc3JjPSdcIiArIHRoaXMuc3JjICsgXCIgJ2FsdD0nXCIgKyB0aGlzLmFsdCArIFwiJyBcIjsgLy8gQWRkIHRoZSBzdHlsZXMsIGFmdGVyIGh5cGhlbmF0aW9uXG5cbiAgICB2YXIgc3R5bGVzID0gXCJcIjtcblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBtYXJrdXAgKz0gXCIgc3R5bGU9XFxcIlwiICsgdXRpbHMuZXNjYXBlKHN0eWxlcykgKyBcIlxcXCJcIjtcbiAgICB9XG5cbiAgICBtYXJrdXAgKz0gXCInLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbnZhciBpQ29tYmluYXRpb25zID0ge1xuICAnw64nOiAnXFx1MDEzMVxcdTAzMDInLFxuICAnw68nOiAnXFx1MDEzMVxcdTAzMDgnLFxuICAnw60nOiAnXFx1MDEzMVxcdTAzMDEnLFxuICAvLyAnxKsnOiAnXFx1MDEzMVxcdTAzMDQnLCAvLyBlbmFibGUgd2hlbiB3ZSBhZGQgRXh0ZW5kZWQgTGF0aW5cbiAgJ8OsJzogJ1xcdTAxMzFcXHUwMzAwJ1xufTtcbi8qKlxuICogQSBzeW1ib2wgbm9kZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBzeW1ib2wuIEl0IGVpdGhlciByZW5kZXJzXG4gKiB0byBhIHNpbmdsZSB0ZXh0IG5vZGUsIG9yIGEgc3BhbiB3aXRoIGEgc2luZ2xlIHRleHQgbm9kZSBpbiBpdCwgZGVwZW5kaW5nIG9uXG4gKiB3aGV0aGVyIGl0IGhhcyBDU1MgY2xhc3Nlcywgc3R5bGVzLCBvciBuZWVkcyBpdGFsaWMgY29ycmVjdGlvbi5cbiAqL1xuXG5jbGFzcyBTeW1ib2xOb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCwgaGVpZ2h0LCBkZXB0aCwgaXRhbGljLCBza2V3LCB3aWR0aCwgY2xhc3Nlcywgc3R5bGUpIHtcbiAgICB0aGlzLnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5oZWlnaHQgPSB2b2lkIDA7XG4gICAgdGhpcy5kZXB0aCA9IHZvaWQgMDtcbiAgICB0aGlzLml0YWxpYyA9IHZvaWQgMDtcbiAgICB0aGlzLnNrZXcgPSB2b2lkIDA7XG4gICAgdGhpcy53aWR0aCA9IHZvaWQgMDtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnN0eWxlID0gdm9pZCAwO1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgfHwgMDtcbiAgICB0aGlzLmRlcHRoID0gZGVwdGggfHwgMDtcbiAgICB0aGlzLml0YWxpYyA9IGl0YWxpYyB8fCAwO1xuICAgIHRoaXMuc2tldyA9IHNrZXcgfHwgMDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMDtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICAgIHRoaXMuc3R5bGUgPSBzdHlsZSB8fCB7fTtcbiAgICB0aGlzLm1heEZvbnRTaXplID0gMDsgLy8gTWFyayB0ZXh0IGZyb20gbm9uLUxhdGluIHNjcmlwdHMgd2l0aCBzcGVjaWZpYyBjbGFzc2VzIHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gc3BlY2lmeSB3aGljaCBmb250cyB0byB1c2UuICBUaGlzIGFsbG93cyB1cyB0byByZW5kZXIgdGhlc2VcbiAgICAvLyBjaGFyYWN0ZXJzIHdpdGggYSBzZXJpZiBmb250IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGJyb3dzZXIgd291bGRcbiAgICAvLyBlaXRoZXIgZGVmYXVsdCB0byBhIHNhbnMgc2VyaWYgb3IgcmVuZGVyIGEgcGxhY2Vob2xkZXIgY2hhcmFjdGVyLlxuICAgIC8vIFdlIHVzZSBDU1MgY2xhc3MgbmFtZXMgbGlrZSBjamtfZmFsbGJhY2ssIGhhbmd1bF9mYWxsYmFjayBhbmRcbiAgICAvLyBicmFobWljX2ZhbGxiYWNrLiBTZWUgLi91bmljb2RlU2NyaXB0cy5qcyBmb3IgdGhlIHNldCBvZiBwb3NzaWJsZVxuICAgIC8vIHNjcmlwdCBuYW1lc1xuXG4gICAgdmFyIHNjcmlwdCA9IHNjcmlwdEZyb21Db2RlcG9pbnQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgaWYgKHNjcmlwdCkge1xuICAgICAgdGhpcy5jbGFzc2VzLnB1c2goc2NyaXB0ICsgXCJfZmFsbGJhY2tcIik7XG4gICAgfVxuXG4gICAgaWYgKC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkpIHtcbiAgICAgIC8vIGFkZCDEqyB3aGVuIHdlIGFkZCBFeHRlbmRlZCBMYXRpblxuICAgICAgdGhpcy50ZXh0ID0gaUNvbWJpbmF0aW9uc1t0aGlzLnRleHRdO1xuICAgIH1cbiAgfVxuXG4gIGhhc0NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHJldHVybiB1dGlscy5jb250YWlucyh0aGlzLmNsYXNzZXMsIGNsYXNzTmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IG5vZGUgb3Igc3BhbiBmcm9tIGEgc3ltYm9sIG5vZGUuIE5vdGUgdGhhdCBhIHNwYW4gaXMgb25seVxuICAgKiBjcmVhdGVkIGlmIGl0IGlzIG5lZWRlZC5cbiAgICovXG5cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpO1xuICAgIHZhciBzcGFuID0gbnVsbDtcblxuICAgIGlmICh0aGlzLml0YWxpYyA+IDApIHtcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHNwYW4uc3R5bGUubWFyZ2luUmlnaHQgPSBtYWtlRW0odGhpcy5pdGFsaWMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3BhbiA9IHNwYW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9IGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgc3R5bGUgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGUpKSB7XG4gICAgICAgIHNwYW4gPSBzcGFuIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzZWVtIHRvIHVuZGVyc3RhbmQgc3Bhbi5zdHlsZSdzIHR5cGUuXG5cbiAgICAgICAgc3Bhbi5zdHlsZVtzdHlsZV0gPSB0aGlzLnN0eWxlW3N0eWxlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Bhbikge1xuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIHJldHVybiBzcGFuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHN5bWJvbCBub2RlLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIC8vIFRPRE8oYWxwZXJ0KTogTW9yZSBkdXBsaWNhdGlvbiB0aGFuIEknZCBsaWtlIGZyb21cbiAgICAvLyBzcGFuLnByb3RvdHlwZS50b01hcmt1cCBhbmQgc3ltYm9sTm9kZS5wcm90b3R5cGUudG9Ob2RlLi4uXG4gICAgdmFyIG5lZWRzU3BhbiA9IGZhbHNlO1xuICAgIHZhciBtYXJrdXAgPSBcIjxzcGFuXCI7XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuICAgICAgbmVlZHNTcGFuID0gdHJ1ZTtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcz1cXFwiXCI7XG4gICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpO1xuICAgICAgbWFya3VwICs9IFwiXFxcIlwiO1xuICAgIH1cblxuICAgIHZhciBzdHlsZXMgPSBcIlwiO1xuXG4gICAgaWYgKHRoaXMuaXRhbGljID4gMCkge1xuICAgICAgc3R5bGVzICs9IFwibWFyZ2luLXJpZ2h0OlwiICsgdGhpcy5pdGFsaWMgKyBcImVtO1wiO1xuICAgIH1cblxuICAgIGZvciAodmFyIHN0eWxlIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlKSkge1xuICAgICAgICBzdHlsZXMgKz0gdXRpbHMuaHlwaGVuYXRlKHN0eWxlKSArIFwiOlwiICsgdGhpcy5zdHlsZVtzdHlsZV0gKyBcIjtcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICBuZWVkc1NwYW4gPSB0cnVlO1xuICAgICAgbWFya3VwICs9IFwiIHN0eWxlPVxcXCJcIiArIHV0aWxzLmVzY2FwZShzdHlsZXMpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgdmFyIGVzY2FwZWQgPSB1dGlscy5lc2NhcGUodGhpcy50ZXh0KTtcblxuICAgIGlmIChuZWVkc1NwYW4pIHtcbiAgICAgIG1hcmt1cCArPSBcIj5cIjtcbiAgICAgIG1hcmt1cCArPSBlc2NhcGVkO1xuICAgICAgbWFya3VwICs9IFwiPC9zcGFuPlwiO1xuICAgICAgcmV0dXJuIG1hcmt1cDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVzY2FwZWQ7XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogU1ZHIG5vZGVzIGFyZSB1c2VkIHRvIHJlbmRlciBzdHJldGNoeSB3aWRlIGVsZW1lbnRzLlxuICovXG5cbmNsYXNzIFN2Z05vZGUge1xuICBjb25zdHJ1Y3RvcihjaGlsZHJlbiwgYXR0cmlidXRlcykge1xuICAgIHRoaXMuY2hpbGRyZW4gPSB2b2lkIDA7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gdm9pZCAwO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJzdmdcIik7IC8vIEFwcGx5IGF0dHJpYnV0ZXNcblxuICAgIGZvciAodmFyIGF0dHIgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgYXR0cikpIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0ciwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCJcIjsgLy8gQXBwbHkgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9J1wiICsgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdICsgXCInXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvc3ZnPlwiO1xuICAgIHJldHVybiBtYXJrdXA7XG4gIH1cblxufVxuY2xhc3MgUGF0aE5vZGUge1xuICBjb25zdHJ1Y3RvcihwYXRoTmFtZSwgYWx0ZXJuYXRlKSB7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHZvaWQgMDtcbiAgICB0aGlzLmFsdGVybmF0ZSA9IHZvaWQgMDtcbiAgICB0aGlzLnBhdGhOYW1lID0gcGF0aE5hbWU7XG4gICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7IC8vIFVzZWQgb25seSBmb3IgXFxzcXJ0LCBcXHBoYXNlLCAmIHRhbGwgZGVsaW1zXG4gIH1cblxuICB0b05vZGUoKSB7XG4gICAgdmFyIHN2Z05TID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInBhdGhcIik7XG5cbiAgICBpZiAodGhpcy5hbHRlcm5hdGUpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCB0aGlzLmFsdGVybmF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZFwiLCBwYXRoW3RoaXMucGF0aE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIFwiPHBhdGggZD0nXCIgKyB0aGlzLmFsdGVybmF0ZSArIFwiJy8+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxwYXRoIGQ9J1wiICsgcGF0aFt0aGlzLnBhdGhOYW1lXSArIFwiJy8+XCI7XG4gICAgfVxuICB9XG5cbn1cbmNsYXNzIExpbmVOb2RlIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICB9XG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJsaW5lXCIpOyAvLyBBcHBseSBhdHRyaWJ1dGVzXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsIGF0dHIpKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHIsIHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8bGluZVwiO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9J1wiICsgdGhpcy5hdHRyaWJ1dGVzW2F0dHJdICsgXCInXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiLz5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG5cbn1cbmZ1bmN0aW9uIGFzc2VydFN5bWJvbERvbU5vZGUoZ3JvdXApIHtcbiAgaWYgKGdyb3VwIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgIHJldHVybiBncm91cDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgXCIgKyBTdHJpbmcoZ3JvdXApICsgXCIuXCIpO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRTcGFuKGdyb3VwKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIFNwYW4pIHtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCBcIiArIFN0cmluZyhncm91cCkgKyBcIi5cIik7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZpbGUgaG9sZHMgYSBsaXN0IG9mIGFsbCBuby1hcmd1bWVudCBmdW5jdGlvbnMgYW5kIHNpbmdsZS1jaGFyYWN0ZXJcbiAqIHN5bWJvbHMgKGxpa2UgJ2EnIG9yICc7JykuXG4gKlxuICogRm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMsIHRoZXJlIGFyZSB0aHJlZSBwcm9wZXJ0aWVzIHRoZXkgY2FuIGhhdmU6XG4gKiAtIGZvbnQgKHJlcXVpcmVkKTogdGhlIGZvbnQgdG8gYmUgdXNlZCBmb3IgdGhpcyBzeW1ib2wuIEVpdGhlciBcIm1haW5cIiAodGhlXG4gICAgIG5vcm1hbCBmb250KSwgb3IgXCJhbXNcIiAodGhlIGFtcyBmb250cykuXG4gKiAtIGdyb3VwIChyZXF1aXJlZCk6IHRoZSBQYXJzZU5vZGUgZ3JvdXAgdHlwZSB0aGUgc3ltYm9sIHNob3VsZCBoYXZlIChpLmUuXG4gICAgIFwidGV4dG9yZFwiLCBcIm1hdGhvcmRcIiwgZXRjKS5cbiAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LYVRlWC9LYVRlWC93aWtpL0V4YW1pbmluZy1UZVgjZ3JvdXAtdHlwZXNcbiAqIC0gcmVwbGFjZTogdGhlIGNoYXJhY3RlciB0aGF0IHRoaXMgc3ltYm9sIG9yIGZ1bmN0aW9uIHNob3VsZCBiZVxuICogICByZXBsYWNlZCB3aXRoIChpLmUuIFwiXFxwaGlcIiBoYXMgYSByZXBsYWNlIHZhbHVlIG9mIFwiXFx1MDNkNVwiLCB0aGUgcGhpXG4gKiAgIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBmb250KS5cbiAqXG4gKiBUaGUgb3V0ZXJtb3N0IG1hcCBpbiB0aGUgdGFibGUgaW5kaWNhdGVzIHdoYXQgbW9kZSB0aGUgc3ltYm9scyBzaG91bGQgYmVcbiAqIGFjY2VwdGVkIGluIChlLmcuIFwibWF0aFwiIG9yIFwidGV4dFwiKS5cbiAqL1xuLy8gU29tZSBvZiB0aGVzZSBoYXZlIGEgXCItdG9rZW5cIiBzdWZmaXggc2luY2UgdGhlc2UgYXJlIGFsc28gdXNlZCBhcyBgUGFyc2VOb2RlYFxuLy8gdHlwZXMgZm9yIHJhdyB0ZXh0IHRva2VucywgYW5kIHdlIHdhbnQgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggaGlnaGVyLWxldmVsXG4vLyBgUGFyc2VOb2RlYCB0eXBlcy4gVGhlc2UgYFBhcnNlTm9kZWBzIGFyZSBjb25zdHJ1Y3RlZCB3aXRoaW4gYFBhcnNlcmAgYnlcbi8vIGxvb2tpbmcgdXAgdGhlIGBzeW1ib2xzYCBtYXAuXG52YXIgQVRPTVMgPSB7XG4gIFwiYmluXCI6IDEsXG4gIFwiY2xvc2VcIjogMSxcbiAgXCJpbm5lclwiOiAxLFxuICBcIm9wZW5cIjogMSxcbiAgXCJwdW5jdFwiOiAxLFxuICBcInJlbFwiOiAxXG59O1xudmFyIE5PTl9BVE9NUyA9IHtcbiAgXCJhY2NlbnQtdG9rZW5cIjogMSxcbiAgXCJtYXRob3JkXCI6IDEsXG4gIFwib3AtdG9rZW5cIjogMSxcbiAgXCJzcGFjaW5nXCI6IDEsXG4gIFwidGV4dG9yZFwiOiAxXG59O1xudmFyIHN5bWJvbHMgPSB7XG4gIFwibWF0aFwiOiB7fSxcbiAgXCJ0ZXh0XCI6IHt9XG59O1xuLyoqIGBhY2NlcHRVbmljb2RlQ2hhciA9IHRydWVgIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBgcmVwbGFjZWAgaXMgc2V0LiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVTeW1ib2wobW9kZSwgZm9udCwgZ3JvdXAsIHJlcGxhY2UsIG5hbWUsIGFjY2VwdFVuaWNvZGVDaGFyKSB7XG4gIHN5bWJvbHNbbW9kZV1bbmFtZV0gPSB7XG4gICAgZm9udCxcbiAgICBncm91cCxcbiAgICByZXBsYWNlXG4gIH07XG5cbiAgaWYgKGFjY2VwdFVuaWNvZGVDaGFyICYmIHJlcGxhY2UpIHtcbiAgICBzeW1ib2xzW21vZGVdW3JlcGxhY2VdID0gc3ltYm9sc1ttb2RlXVtuYW1lXTtcbiAgfVxufSAvLyBTb21lIGFiYnJldmlhdGlvbnMgZm9yIGNvbW1vbmx5IHVzZWQgc3RyaW5ncy5cbi8vIFRoaXMgaGVscHMgbWluaWZ5IHRoZSBjb2RlLCBhbmQgYWxzbyBzcG90dGluZyB0eXBvcyB1c2luZyBqc2hpbnQuXG4vLyBtb2RlczpcblxudmFyIG1hdGggPSBcIm1hdGhcIjtcbnZhciB0ZXh0ID0gXCJ0ZXh0XCI7IC8vIGZvbnRzOlxuXG52YXIgbWFpbiA9IFwibWFpblwiO1xudmFyIGFtcyA9IFwiYW1zXCI7IC8vIGdyb3VwczpcblxudmFyIGFjY2VudCA9IFwiYWNjZW50LXRva2VuXCI7XG52YXIgYmluID0gXCJiaW5cIjtcbnZhciBjbG9zZSA9IFwiY2xvc2VcIjtcbnZhciBpbm5lciA9IFwiaW5uZXJcIjtcbnZhciBtYXRob3JkID0gXCJtYXRob3JkXCI7XG52YXIgb3AgPSBcIm9wLXRva2VuXCI7XG52YXIgb3BlbiA9IFwib3BlblwiO1xudmFyIHB1bmN0ID0gXCJwdW5jdFwiO1xudmFyIHJlbCA9IFwicmVsXCI7XG52YXIgc3BhY2luZyA9IFwic3BhY2luZ1wiO1xudmFyIHRleHRvcmQgPSBcInRleHRvcmRcIjsgLy8gTm93IGNvbWVzIHRoZSBzeW1ib2wgdGFibGVcbi8vIFJlbGF0aW9uIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjYxXCIsIFwiXFxcXGVxdWl2XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjdhXCIsIFwiXFxcXHByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyN2JcIiwgXCJcXFxcc3VjY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIzY1wiLCBcIlxcXFxzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyYTVcIiwgXCJcXFxccGVycFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MmFhZlwiLCBcIlxcXFxwcmVjZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTJhYjBcIiwgXCJcXFxcc3VjY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQzXCIsIFwiXFxcXHNpbWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXG1pZFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2YVwiLCBcIlxcXFxsbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI2YlwiLCBcIlxcXFxnZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI0ZFwiLCBcIlxcXFxhc3ltcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIyNVwiLCBcIlxcXFxwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJjOFwiLCBcIlxcXFxib3d0aWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIzMjNcIiwgXCJcXFxcc21pbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyOTFcIiwgXCJcXFxcc3FzdWJzZXRlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI5MlwiLCBcIlxcXFxzcXN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjUwXCIsIFwiXFxcXGRvdGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMzIyXCIsIFwiXFxcXGZyb3duXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjBiXCIsIFwiXFxcXG5pXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjFkXCIsIFwiXFxcXHByb3B0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhMlwiLCBcIlxcXFx2ZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjJhM1wiLCBcIlxcXFxkYXNodlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjIwYlwiLCBcIlxcXFxvd25zXCIpOyAvLyBQdW5jdHVhdGlvblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcHVuY3QsIFwiXFx1MDAyZVwiLCBcIlxcXFxsZG90cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBwdW5jdCwgXCJcXHUyMmM1XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBNaXNjIFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyM1wiLCBcIlxcXFwjXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyM1wiLCBcIlxcXFwjXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyNlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDAyNlwiLCBcIlxcXFwmXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEzNVwiLCBcIlxcXFxhbGVwaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMDBcIiwgXCJcXFxcZm9yYWxsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjEwZlwiLCBcIlxcXFxoYmFyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwM1wiLCBcIlxcXFxleGlzdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjA3XCIsIFwiXFxcXG5hYmxhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjY2ZFwiLCBcIlxcXFxmbGF0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExM1wiLCBcIlxcXFxlbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjZlXCIsIFwiXFxcXG5hdHVyYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYzXCIsIFwiXFxcXGNsdWJzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExOFwiLCBcIlxcXFx3cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NmZcIiwgXCJcXFxcc2hhcnBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNjYyXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExY1wiLCBcIlxcXFxSZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjFcIiwgXCJcXFxcaGVhcnRzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjExMVwiLCBcIlxcXFxJbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTI2NjBcIiwgXCJcXFxcc3BhZGVzdWl0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhN1wiLCBcIlxcXFxTXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhN1wiLCBcIlxcXFxTXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiNlwiLCBcIlxcXFxQXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBiNlwiLCBcIlxcXFxQXCIpOyAvLyBNYXRoIGFuZCBUZXh0XG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMjBcIiwgXCJcXFxcZGFnXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAyMFwiLCBcIlxcXFxkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIwXCIsIFwiXFxcXHRleHRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDIxXCIsIFwiXFxcXHRleHRkYWdnZXJkYmxcIik7IC8vIExhcmdlIERlbGltaXRlcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIlxcdTIzYjFcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIzYjBcIiwgXCJcXFxcbG1vdXN0YWNoZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyN2VmXCIsIFwiXFxcXHJncm91cFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTI3ZWVcIiwgXCJcXFxcbGdyb3VwXCIsIHRydWUpOyAvLyBCaW5hcnkgT3BlcmF0b3JzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxM1wiLCBcIlxcXFxtcFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NlwiLCBcIlxcXFxvbWludXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOGVcIiwgXCJcXFxcdXBsdXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTNcIiwgXCJcXFxcc3FjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTdcIiwgXCJcXFxcYXN0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjk0XCIsIFwiXFxcXHNxY3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyNWVmXCIsIFwiXFxcXGJpZ2NpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTlcIiwgXCJcXFxcYnVsbGV0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMDIxXCIsIFwiXFxcXGRkYWdnZXJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyNDBcIiwgXCJcXFxcd3JcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTJhM2ZcIiwgXCJcXFxcYW1hbGdcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTAwMjZcIiwgXCJcXFxcQW5kXCIpOyAvLyBmcm9tIGFtc21hdGhcbi8vIEFycm93IFN5bWJvbHNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y1XCIsIFwiXFxcXGxvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDBcIiwgXCJcXFxcTGVmdGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyN2Y4XCIsIFwiXFxcXExvbmdsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZjZcIiwgXCJcXFxcbG9uZ3JpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDJcIiwgXCJcXFxcUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmOVwiLCBcIlxcXFxMb25ncmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NFwiLCBcIlxcXFxsZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmN1wiLCBcIlxcXFxsb25nbGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDRcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTI3ZmFcIiwgXCJcXFxcTG9uZ2xlZnRyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWE2XCIsIFwiXFxcXG1hcHN0b1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjdmY1wiLCBcIlxcXFxsb25nbWFwc3RvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk3XCIsIFwiXFxcXG5lYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYTlcIiwgXCJcXFxcaG9va2xlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFhYVwiLCBcIlxcXFxob29rcmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5OFwiLCBcIlxcXFxzZWFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWJjXCIsIFwiXFxcXGxlZnRoYXJwb29udXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYzBcIiwgXCJcXFxccmlnaHRoYXJwb29udXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTlcIiwgXCJcXFxcc3dhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjFiZFwiLCBcIlxcXFxsZWZ0aGFycG9vbmRvd25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxYzFcIiwgXCJcXFxccmlnaHRoYXJwb29uZG93blwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5NlwiLCBcIlxcXFxud2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWNjXCIsIFwiXFxcXHJpZ2h0bGVmdGhhcnBvb25zXCIsIHRydWUpOyAvLyBBTVMgTmVnYXRlZCBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZlXCIsIFwiXFxcXG5sZXNzXCIsIHRydWUpOyAvLyBTeW1ib2wgbmFtZXMgcHJlY2VlZGVkIGJ5IFwiQFwiIGVhY2ggaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjcm8uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDEwXCIsIFwiXFxcXEBubGVxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxMVwiLCBcIlxcXFxAbmxlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4N1wiLCBcIlxcXFxsbmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjhcIiwgXCJcXFxcbG5lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwY1wiLCBcIlxcXFxAbHZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTZcIiwgXCJcXFxcbG5zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4OVwiLCBcIlxcXFxsbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgwXCIsIFwiXFxcXG5wcmVjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUwIHRvIFxcbnByZWNjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlMFwiLCBcIlxcXFxucHJlY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZThcIiwgXCJcXFxccHJlY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiOVwiLCBcIlxcXFxwcmVjbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQxXCIsIFwiXFxcXG5zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwNlwiLCBcIlxcXFxAbnNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjRcIiwgXCJcXFxcbm1pZFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFjXCIsIFwiXFxcXG52ZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmFkXCIsIFwiXFxcXG52RGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmVhXCIsIFwiXFxcXG50cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlY1wiLCBcIlxcXFxudHJpYW5nbGVsZWZ0ZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4YVwiLCBcIlxcXFxzdWJzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxYVwiLCBcIlxcXFxAdmFyc3Vic2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhY2JcIiwgXCJcXFxcc3Vic2V0bmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE3XCIsIFwiXFxcXEB2YXJzdWJzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNmZcIiwgXCJcXFxcbmd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDBmXCIsIFwiXFxcXEBuZ2Vxc2xhbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZVwiLCBcIlxcXFxAbmdlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4OFwiLCBcIlxcXFxnbmVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNjlcIiwgXCJcXFxcZ25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAwZFwiLCBcIlxcXFxAZ3ZlcnRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTdcIiwgXCJcXFxcZ25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4YVwiLCBcIlxcXFxnbmFwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjgxXCIsIFwiXFxcXG5zdWNjXCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMmUxIHRvIFxcbnN1Y2NjdXJseWVxLiBXZSdsbCB1c2UgdGhlIEFNUyBzeW5vbnltLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlMVwiLCBcIlxcXFxuc3VjY2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZTlcIiwgXCJcXFxcc3VjY25zaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiYVwiLCBcIlxcXFxzdWNjbmFwcHJveFwiLCB0cnVlKTsgLy8gdW5pY29kZS1tYXRoIG1hcHMgXFx1MjI0NiB0byBcXHNpbW5lcXEuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQ2XCIsIFwiXFxcXG5jb25nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMDdcIiwgXCJcXFxcQG5zaG9ydHBhcmFsbGVsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjZcIiwgXCJcXFxcbnBhcmFsbGVsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWZcIiwgXCJcXFxcblZEYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZWJcIiwgXCJcXFxcbnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJlZFwiLCBcIlxcXFxudHJpYW5nbGVyaWdodGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdWUwMThcIiwgXCJcXFxcQG5zdXBzZXRlcXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4YlwiLCBcIlxcXFxzdXBzZXRuZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1ZTAxYlwiLCBcIlxcXFxAdmFyc3Vwc2V0bmVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhY2NcIiwgXCJcXFxcc3Vwc2V0bmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE5XCIsIFwiXFxcXEB2YXJzdXBzZXRuZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYWVcIiwgXCJcXFxcblZkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjVcIiwgXCJcXFxccHJlY25lcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFiNlwiLCBcIlxcXFxzdWNjbmVxcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHVlMDE2XCIsIFwiXFxcXEBuc3Vic2V0ZXFxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYjRcIiwgXCJcXFxcdW5saGRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiNVwiLCBcIlxcXFx1bnJoZFwiKTsgLy8gQU1TIE5lZ2F0ZWQgQXJyb3dzXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTlhXCIsIFwiXFxcXG5sZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjE5YlwiLCBcIlxcXFxucmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNkXCIsIFwiXFxcXG5MZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjZlwiLCBcIlxcXFxuUmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWFlXCIsIFwiXFxcXG5sZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNlXCIsIFwiXFxcXG5MZWZ0cmlnaHRhcnJvd1wiLCB0cnVlKTsgLy8gQU1TIE1pc2NcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YjNcIiwgXCJcXFxcdmFydHJpYW5nbGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMGZcIiwgXCJcXFxcaHNsYXNoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWJkXCIsIFwiXFxcXHRyaWFuZ2xlZG93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVjYVwiLCBcIlxcXFxsb3plbmdlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNGM4XCIsIFwiXFxcXGNpcmNsZWRTXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGFlXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGFlXCIsIFwiXFxcXGNpcmNsZWRSXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIxXCIsIFwiXFxcXG1lYXN1cmVkYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIyMDRcIiwgXCJcXFxcbmV4aXN0c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEyN1wiLCBcIlxcXFxtaG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTIxMzJcIiwgXCJcXFxcRmludlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjE0MVwiLCBcIlxcXFxHYW1lXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMDM1XCIsIFwiXFxcXGJhY2twcmltZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjViMlwiLCBcIlxcXFxibGFja3RyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWJjXCIsIFwiXFxcXGJsYWNrdHJpYW5nbGVkb3duXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWEwXCIsIFwiXFxcXGJsYWNrc3F1YXJlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyOWViXCIsIFwiXFxcXGJsYWNrbG96ZW5nZVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjYwNVwiLCBcIlxcXFxiaWdzdGFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjIyXCIsIFwiXFxcXHNwaGVyaWNhbGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMjAxXCIsIFwiXFxcXGNvbXBsZW1lbnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFUrRjAgdG8gXFxtYXRoZXRoLiBXZSBtYXAgdG8gQU1TIGZ1bmN0aW9uIFxcZXRoXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDBmMFwiLCBcIlxcXFxldGhcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGYwXCIsIFwiXFx1MDBmMFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjU3MVwiLCBcIlxcXFxkaWFndXBcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1NzJcIiwgXCJcXFxcZGlhZ2Rvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI1YTFcIiwgXCJcXFxcc3F1YXJlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyNWExXCIsIFwiXFxcXEJveFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjVjYVwiLCBcIlxcXFxEaWFtb25kXCIpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBVK0E1IHRvIFxcbWF0aHllbi4gV2UgbWFwIHRvIEFNUyBmdW5jdGlvbiBcXHllblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTAwYTVcIiwgXCJcXFxceWVuXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUwMGE1XCIsIFwiXFxcXHllblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjcxM1wiLCBcIlxcXFxjaGVja21hcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlxcdTI3MTNcIiwgXCJcXFxcY2hlY2ttYXJrXCIpOyAvLyBBTVMgSGVicmV3XG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzNlwiLCBcIlxcXFxiZXRoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUyMTM4XCIsIFwiXFxcXGRhbGV0aFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjEzN1wiLCBcIlxcXFxnaW1lbFwiLCB0cnVlKTsgLy8gQU1TIEdyZWVrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MDNkZFwiLCBcIlxcXFxkaWdhbW1hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJcXHUwM2YwXCIsIFwiXFxcXHZhcmthcHBhXCIpOyAvLyBBTVMgRGVsaW1pdGVyc1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBvcGVuLCBcIlxcdTI1MGNcIiwgXCJcXFxcQHVsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgY2xvc2UsIFwiXFx1MjUxMFwiLCBcIlxcXFxAdXJjb3JuZXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBvcGVuLCBcIlxcdTI1MTRcIiwgXCJcXFxcQGxsY29ybmVyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgY2xvc2UsIFwiXFx1MjUxOFwiLCBcIlxcXFxAbHJjb3JuZXJcIiwgdHJ1ZSk7IC8vIEFNUyBCaW5hcnkgUmVsYXRpb25zXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY2XCIsIFwiXFxcXGxlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE3ZFwiLCBcIlxcXFxsZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTk1XCIsIFwiXFxcXGVxc2xhbnRsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzJcIiwgXCJcXFxcbGVzc3NpbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTg1XCIsIFwiXFxcXGxlc3NhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI0YVwiLCBcIlxcXFxhcHByb3hlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmQ2XCIsIFwiXFxcXGxlc3Nkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOFwiLCBcIlxcXFxsbGxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3NlwiLCBcIlxcXFxsZXNzZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGFcIiwgXCJcXFxcbGVzc2VxZ3RyXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGJcIiwgXCJcXFxcbGVzc2VxcWd0clwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjUxXCIsIFwiXFxcXGRvdGVxZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTNcIiwgXCJcXFxccmlzaW5nZG90c2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNTJcIiwgXCJcXFxcZmFsbGluZ2RvdHNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNkXCIsIFwiXFxcXGJhY2tzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJjZFwiLCBcIlxcXFxiYWNrc2ltZXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFjNVwiLCBcIlxcXFxzdWJzZXRlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkMFwiLCBcIlxcXFxTdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI4ZlwiLCBcIlxcXFxzcXN1YnNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdjXCIsIFwiXFxcXHByZWNjdXJseWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGVcIiwgXCJcXFxcY3VybHllcXByZWNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZVwiLCBcIlxcXFxwcmVjc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjdcIiwgXCJcXFxccHJlY2FwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmIyXCIsIFwiXFxcXHZhcnRyaWFuZ2xlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmI0XCIsIFwiXFxcXHRyaWFuZ2xlbGVmdGVxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyYThcIiwgXCJcXFxcdkRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhYVwiLCBcIlxcXFxWdmRhc2hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjMyM1wiLCBcIlxcXFxzbWFsbHNtaWxlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIzMjJcIiwgXCJcXFxcc21hbGxmcm93blwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRmXCIsIFwiXFxcXGJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjRlXCIsIFwiXFxcXEJ1bXBlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjY3XCIsIFwiXFxcXGdlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE3ZVwiLCBcIlxcXFxnZXFzbGFudFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyYTk2XCIsIFwiXFxcXGVxc2xhbnRndHJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3M1wiLCBcIlxcXFxndHJzaW1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmE4NlwiLCBcIlxcXFxndHJhcHByb3hcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkN1wiLCBcIlxcXFxndHJkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOVwiLCBcIlxcXFxnZ2dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3N1wiLCBcIlxcXFxndHJsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGJcIiwgXCJcXFxcZ3RyZXFsZXNzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhOGNcIiwgXCJcXFxcZ3RyZXFxbGVzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU2XCIsIFwiXFxcXGVxY2lyY1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjU3XCIsIFwiXFxcXGNpcmNlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjVjXCIsIFwiXFxcXHRyaWFuZ2xlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjNjXCIsIFwiXFxcXHRoaWNrc2ltXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNDhcIiwgXCJcXFxcdGhpY2thcHByb3hcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MmFjNlwiLCBcIlxcXFxzdXBzZXRlcXFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkMVwiLCBcIlxcXFxTdXBzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI5MFwiLCBcIlxcXFxzcXN1cHNldFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjdkXCIsIFwiXFxcXHN1Y2NjdXJseWVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyZGZcIiwgXCJcXFxcY3VybHllcXN1Y2NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3ZlwiLCBcIlxcXFxzdWNjc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTJhYjhcIiwgXCJcXFxcc3VjY2FwcHJveFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmIzXCIsIFwiXFxcXHZhcnRyaWFuZ2xlcmlnaHRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJiNVwiLCBcIlxcXFx0cmlhbmdsZXJpZ2h0ZXFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJhOVwiLCBcIlxcXFxWZGFzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjIzXCIsIFwiXFxcXHNob3J0bWlkXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyMjVcIiwgXCJcXFxcc2hvcnRwYXJhbGxlbFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjZjXCIsIFwiXFxcXGJldHdlZW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkNFwiLCBcIlxcXFxwaXRjaGZvcmtcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjIxZFwiLCBcIlxcXFx2YXJwcm9wdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjVjMFwiLCBcIlxcXFxibGFja3RyaWFuZ2xlbGVmdFwiKTsgLy8gdW5pY29kZS1tYXRoIHNheXMgdGhhdCBcXHRoZXJlZm9yZSBpcyBhIG1hdGhvcmQgYXRvbS5cbi8vIFdlIGtlcHQgdGhlIGFtc3N5bWIgYXRvbSB0eXBlLCB3aGljaCBpcyByZWwuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM0XCIsIFwiXFxcXHRoZXJlZm9yZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjBkXCIsIFwiXFxcXGJhY2tlcHNpbG9uXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTI1YjZcIiwgXCJcXFxcYmxhY2t0cmlhbmdsZXJpZ2h0XCIpOyAvLyB1bmljb2RlLW1hdGggc2F5cyB0aGF0IFxcYmVjYXVzZSBpcyBhIG1hdGhvcmQgYXRvbS5cbi8vIFdlIGtlcHQgdGhlIGFtc3N5bWIgYXRvbSB0eXBlLCB3aGljaCBpcyByZWwuXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjM1XCIsIFwiXFxcXGJlY2F1c2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOFwiLCBcIlxcXFxsbGxlc3NcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjJkOVwiLCBcIlxcXFxnZ2d0clwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmIyXCIsIFwiXFxcXGxoZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmIzXCIsIFwiXFxcXHJoZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMjQyXCIsIFwiXFxcXGVxc2ltXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmM4XCIsIFwiXFxcXEpvaW5cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI1MVwiLCBcIlxcXFxEb3RlcVwiLCB0cnVlKTsgLy8gQU1TIEJpbmFyeSBPcGVyYXRvcnNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyMTRcIiwgXCJcXFxcZG90cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNtYWxsc2V0bWludXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkMlwiLCBcIlxcXFxDYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJkM1wiLCBcIlxcXFxDdXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MmE1ZVwiLCBcIlxcXFxkb3VibGViYXJ3ZWRnZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlmXCIsIFwiXFxcXGJveG1pbnVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWVcIiwgXCJcXFxcYm94cGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmM3XCIsIFwiXFxcXGRpdmlkZW9udGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjOVwiLCBcIlxcXFxsdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjYVwiLCBcIlxcXFxydGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjYlwiLCBcIlxcXFxsZWZ0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNjXCIsIFwiXFxcXHJpZ2h0dGhyZWV0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmNmXCIsIFwiXFxcXGN1cmx5d2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJjZVwiLCBcIlxcXFxjdXJseXZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMjlkXCIsIFwiXFxcXGNpcmNsZWRkYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWJcIiwgXCJcXFxcY2lyY2xlZGFzdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmM1XCIsIFwiXFxcXGNlbnRlcmRvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIGJpbiwgXCJcXHUyMmJhXCIsIFwiXFxcXGludGVyY2FsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDJcIiwgXCJcXFxcZG91YmxlY2FwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyZDNcIiwgXCJcXFxcZG91YmxlY3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYTBcIiwgXCJcXFxcYm94dGltZXNcIiwgdHJ1ZSk7IC8vIEFNUyBBcnJvd3Ncbi8vIE5vdGU6IHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxZTIgdG8gdGhlaXIgb3duIGZ1bmN0aW9uIFxccmlnaHRkYXNoYXJyb3cuXG4vLyBXZSdsbCBtYXAgaXQgdG8gQU1TIGZ1bmN0aW9uIFxcZGFzaHJpZ2h0YXJyb3cuIEl0IHByb2R1Y2VzIHRoZSBzYW1lIGF0b20uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWUyXCIsIFwiXFxcXGRhc2hyaWdodGFycm93XCIsIHRydWUpOyAvLyB1bmljb2RlLW1hdGggbWFwcyBcXHUyMWUwIHRvIFxcbGVmdGRhc2hhcnJvdy4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZTBcIiwgXCJcXFxcZGFzaGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM3XCIsIFwiXFxcXGxlZnRsZWZ0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzZcIiwgXCJcXFxcbGVmdHJpZ2h0YXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGFcIiwgXCJcXFxcTGxlZnRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMTllXCIsIFwiXFxcXHR3b2hlYWRsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhMlwiLCBcIlxcXFxsZWZ0YXJyb3d0YWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWJcIiwgXCJcXFxcbG9vcGFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNiXCIsIFwiXFxcXGxlZnRyaWdodGhhcnBvb25zXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYjZcIiwgXCJcXFxcY3VydmVhcnJvd2xlZnRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxYmEgdG8gXFxhY3dvcGVuY2lyY2xlYXJyb3cuIFdlJ2xsIHVzZSB0aGUgQU1TIHN5bm9ueW0uXG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWJhXCIsIFwiXFxcXGNpcmNsZWFycm93bGVmdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWIwXCIsIFwiXFxcXExzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM4XCIsIFwiXFxcXHVwdXBhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiZlwiLCBcIlxcXFx1cGhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYzNcIiwgXCJcXFxcZG93bmhhcnBvb25sZWZ0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmI2XCIsIFwiXFxcXG9yaWdvZlwiLCB0cnVlKTsgLy8gbm90IGluIGZvbnRcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmI3XCIsIFwiXFxcXGltYWdlb2ZcIiwgdHJ1ZSk7IC8vIG5vdCBpbiBmb250XG5cbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMmI4XCIsIFwiXFxcXG11bHRpbWFwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWRcIiwgXCJcXFxcbGVmdHJpZ2h0c3F1aWdhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWM5XCIsIFwiXFxcXHJpZ2h0cmlnaHRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjNFwiLCBcIlxcXFxyaWdodGxlZnRhcnJvd3NcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFhMFwiLCBcIlxcXFx0d29oZWFkcmlnaHRhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWEzXCIsIFwiXFxcXHJpZ2h0YXJyb3d0YWlsXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYWNcIiwgXCJcXFxcbG9vcGFycm93cmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFiN1wiLCBcIlxcXFxjdXJ2ZWFycm93cmlnaHRcIiwgdHJ1ZSk7IC8vIHVuaWNvZGUtbWF0aCBtYXBzIFxcdTIxYmIgdG8gXFxjd29wZW5jaXJjbGVhcnJvdy4gV2UnbGwgdXNlIHRoZSBBTVMgc3lub255bS5cblxuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmJcIiwgXCJcXFxcY2lyY2xlYXJyb3dyaWdodFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWIxXCIsIFwiXFxcXFJzaFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWNhXCIsIFwiXFxcXGRvd25kb3duYXJyb3dzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmVcIiwgXCJcXFxcdXBoYXJwb29ucmlnaHRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjFjMlwiLCBcIlxcXFxkb3duaGFycG9vbnJpZ2h0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGRcIiwgXCJcXFxccmlnaHRzcXVpZ2Fycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxZGRcIiwgXCJcXFxcbGVhZHN0b1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHJlbCwgXCJcXHUyMWRiXCIsIFwiXFxcXFJyaWdodGFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIxYmVcIiwgXCJcXFxccmVzdHJpY3Rpb25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcJFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcJFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiRcIiwgXCJcXFxcdGV4dGRvbGxhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIiVcIiwgXCJcXFxcJVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIiVcIiwgXCJcXFxcJVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcX1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl9cIiwgXCJcXFxcdGV4dHVuZGVyc2NvcmVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjIwXCIsIFwiXFxcXGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIxZVwiLCBcIlxcXFxpbmZ0eVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMzJcIiwgXCJcXFxccHJpbWVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyNWIzXCIsIFwiXFxcXHRyaWFuZ2xlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5M1wiLCBcIlxcXFxHYW1tYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzOTRcIiwgXCJcXFxcRGVsdGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzk4XCIsIFwiXFxcXFRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDM5YlwiLCBcIlxcXFxMYW1iZGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMzllXCIsIFwiXFxcXFhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhMFwiLCBcIlxcXFxQaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYTNcIiwgXCJcXFxcU2lnbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E1XCIsIFwiXFxcXFVwc2lsb25cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwM2E2XCIsIFwiXFxcXFBoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAzYThcIiwgXCJcXFxcUHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDNhOVwiLCBcIlxcXFxPbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIkFcIiwgXCJcXHUwMzkxXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiQlwiLCBcIlxcdTAzOTJcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJFXCIsIFwiXFx1MDM5NVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlpcIiwgXCJcXHUwMzk2XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiSFwiLCBcIlxcdTAzOTdcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJJXCIsIFwiXFx1MDM5OVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIktcIiwgXCJcXHUwMzlBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiTVwiLCBcIlxcdTAzOUNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MDM5RFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIk9cIiwgXCJcXHUwMzlGXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiUFwiLCBcIlxcdTAzQTFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJUXCIsIFwiXFx1MDNBNFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlhcIiwgXCJcXHUwM0E3XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhY1wiLCBcIlxcXFxuZWdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGFjXCIsIFwiXFxcXGxub3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmE0XCIsIFwiXFxcXHRvcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyYTVcIiwgXCJcXFxcYm90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFxlbXB0eXNldFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjIwNVwiLCBcIlxcXFx2YXJub3RoaW5nXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiMVwiLCBcIlxcXFxhbHBoYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjJcIiwgXCJcXFxcYmV0YVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjNcIiwgXCJcXFxcZ2FtbWFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I0XCIsIFwiXFxcXGRlbHRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmNVwiLCBcIlxcXFxlcHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiNlwiLCBcIlxcXFx6ZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiN1wiLCBcIlxcXFxldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2I4XCIsIFwiXFxcXHRoZXRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiOVwiLCBcIlxcXFxpb3RhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiYVwiLCBcIlxcXFxrYXBwYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmJcIiwgXCJcXFxcbGFtYmRhXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiY1wiLCBcIlxcXFxtdVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYmRcIiwgXCJcXFxcbnVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2JlXCIsIFwiXFxcXHhpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNiZlwiLCBcIlxcXFxvbWljcm9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjMFwiLCBcIlxcXFxwaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzFcIiwgXCJcXFxccmhvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjM1wiLCBcIlxcXFxzaWdtYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzRcIiwgXCJcXFxcdGF1XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNVwiLCBcIlxcXFx1cHNpbG9uXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNkNVwiLCBcIlxcXFxwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2M3XCIsIFwiXFxcXGNoaVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYzhcIiwgXCJcXFxccHNpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjOVwiLCBcIlxcXFxvbWVnYVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzYjVcIiwgXCJcXFxcdmFyZXBzaWxvblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdTAzZDFcIiwgXCJcXFxcdmFydGhldGFcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2Q2XCIsIFwiXFxcXHZhcnBpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNmMVwiLCBcIlxcXFx2YXJyaG9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgXCJcXHUwM2MyXCIsIFwiXFxcXHZhcnNpZ21hXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1MDNjNlwiLCBcIlxcXFx2YXJwaGlcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMTdcIiwgXCIqXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCIrXCIsIFwiK1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxMlwiLCBcIi1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzVcIiwgXCJcXFxcY2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIxOFwiLCBcIlxcXFxjaXJjXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUwMGY3XCIsIFwiXFxcXGRpdlwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBiMVwiLCBcIlxcXFxwbVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MDBkN1wiLCBcIlxcXFx0aW1lc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjIyOVwiLCBcIlxcXFxjYXBcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMmFcIiwgXCJcXFxcY3VwXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjE2XCIsIFwiXFxcXHNldG1pbnVzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXGxhbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyMjhcIiwgXCJcXFxcbG9yXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI3XCIsIFwiXFxcXHdlZGdlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMjI4XCIsIFwiXFxcXHZlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIyMWFcIiwgXCJcXFxcc3VyZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTI3ZThcIiwgXCJcXFxcbGFuZ2xlXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwiXFx1MjIyM1wiLCBcIlxcXFxsdmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIyMjVcIiwgXCJcXFxcbFZlcnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiP1wiLCBcIj9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiIVwiLCBcIiFcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjdlOVwiLCBcIlxcXFxyYW5nbGVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjIyM1wiLCBcIlxcXFxydmVydFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyMjI1XCIsIFwiXFxcXHJWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI9XCIsIFwiPVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiOlwiLCBcIjpcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNDhcIiwgXCJcXFxcYXBwcm94XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjQ1XCIsIFwiXFxcXGNvbmdcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjVcIiwgXCJcXFxcZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjVcIiwgXCJcXFxcZ2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkwXCIsIFwiXFxcXGdldHNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIj5cIiwgXCJcXFxcZ3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyMDhcIiwgXCJcXFxcaW5cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdWUwMjBcIiwgXCJcXFxcQG5vdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjI4MlwiLCBcIlxcXFxzdWJzZXRcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyODNcIiwgXCJcXFxcc3Vwc2V0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg2XCIsIFwiXFxcXHN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMjg3XCIsIFwiXFxcXHN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyODhcIiwgXCJcXFxcbnN1YnNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyODlcIiwgXCJcXFxcbnN1cHNldGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMmE4XCIsIFwiXFxcXG1vZGVsc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5MFwiLCBcIlxcXFxsZWZ0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIyNjRcIiwgXCJcXFxcbGVxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCI8XCIsIFwiXFxcXGx0XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxOTJcIiwgXCJcXFxcdG9cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCByZWwsIFwiXFx1MjI3MVwiLCBcIlxcXFxuZ2VxXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgcmVsLCBcIlxcdTIyNzBcIiwgXCJcXFxcbmxlcVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcIFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcc3BhY2VcIik7IC8vIFJlZjogTGFUZVggU291cmNlIDJlOiBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcbm9icmVha3NwYWNlfXslXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBcIlxcdTAwYTBcIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFwgXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIiBcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgc3BhY2luZywgXCJcXHUwMGEwXCIsIFwiXFxcXHNwYWNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHNwYWNpbmcsIFwiXFx1MDBhMFwiLCBcIlxcXFxub2JyZWFrc3BhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgc3BhY2luZywgbnVsbCwgXCJcXFxcbm9icmVha1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBzcGFjaW5nLCBudWxsLCBcIlxcXFxhbGxvd2JyZWFrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIixcIiwgXCIsXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHB1bmN0LCBcIjtcIiwgXCI7XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyYmNcIiwgXCJcXFxcYmFyd2VkZ2VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJiYlwiLCBcIlxcXFx2ZWViYXJcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOTlcIiwgXCJcXFxcb2RvdFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5NVwiLCBcIlxcXFxvcGx1c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjI5N1wiLCBcIlxcXFxvdGltZXNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjAyXCIsIFwiXFxcXHBhcnRpYWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyOThcIiwgXCJcXFxcb3NsYXNoXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgYmluLCBcIlxcdTIyOWFcIiwgXCJcXFxcY2lyY2xlZGNpcmNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCBiaW4sIFwiXFx1MjJhMVwiLCBcIlxcXFxib3hkb3RcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjNcIiwgXCJcXFxcYmlndHJpYW5nbGV1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjViZFwiLCBcIlxcXFxiaWd0cmlhbmdsZWRvd25cIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIwMjBcIiwgXCJcXFxcZGFnZ2VyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGJpbiwgXCJcXHUyMmM0XCIsIFwiXFxcXGRpYW1vbmRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTIyYzZcIiwgXCJcXFxcc3RhclwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBiaW4sIFwiXFx1MjVjM1wiLCBcIlxcXFx0cmlhbmdsZWxlZnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYmluLCBcIlxcdTI1YjlcIiwgXCJcXFxcdHJpYW5nbGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIntcIiwgXCJcXFxce1wiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIntcIiwgXCJcXFxcdGV4dGJyYWNlbGVmdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXH1cIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ9XCIsIFwiXFxcXHRleHRicmFjZXJpZ2h0XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wZW4sIFwie1wiLCBcIlxcXFxsYnJhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwifVwiLCBcIlxcXFxyYnJhY2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIltcIiwgXCJcXFxcbGJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGNsb3NlLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXVwiLCBcIlxcXFxyYnJhY2tcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCIoXCIsIFwiXFxcXGxwYXJlblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCIpXCIsIFwiXFxcXHJwYXJlblwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIjxcIiwgXCJcXFxcdGV4dGxlc3NcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiPlwiLCBcIlxcXFx0ZXh0Z3JlYXRlclwiLCB0cnVlKTsgLy8gaW4gVDEgZm9udGVuY1xuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3BlbiwgXCJcXHUyMzBhXCIsIFwiXFxcXGxmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBjbG9zZSwgXCJcXHUyMzBiXCIsIFwiXFxcXHJmbG9vclwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcGVuLCBcIlxcdTIzMDhcIiwgXCJcXFxcbGNlaWxcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgY2xvc2UsIFwiXFx1MjMwOVwiLCBcIlxcXFxyY2VpbFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcYmFja3NsYXNoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyM1wiLCBcInxcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMjIzXCIsIFwiXFxcXHZlcnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJ8XCIsIFwiXFxcXHRleHRiYXJcIiwgdHJ1ZSk7IC8vIGluIFQxIGZvbnRlbmNcblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFx8XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFxWZXJ0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjIyNVwiLCBcIlxcXFx0ZXh0YmFyZGJsXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiflwiLCBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcXFxcIiwgXCJcXFxcdGV4dGJhY2tzbGFzaFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIl5cIiwgXCJcXFxcdGV4dGFzY2lpY2lyY3VtXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTkxXCIsIFwiXFxcXHVwYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDFcIiwgXCJcXFxcVXBhcnJvd1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCByZWwsIFwiXFx1MjE5M1wiLCBcIlxcXFxkb3duYXJyb3dcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgcmVsLCBcIlxcdTIxZDNcIiwgXCJcXFxcRG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMTk1XCIsIFwiXFxcXHVwZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHJlbCwgXCJcXHUyMWQ1XCIsIFwiXFxcXFVwZG93bmFycm93XCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMTBcIiwgXCJcXFxcY29wcm9kXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzFcIiwgXCJcXFxcYmlndmVlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyYzBcIiwgXCJcXFxcYmlnd2VkZ2VcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MmEwNFwiLCBcIlxcXFxiaWd1cGx1c1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMyXCIsIFwiXFxcXGJpZ2NhcFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMmMzXCIsIFwiXFxcXGJpZ2N1cFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXGludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJiXCIsIFwiXFxcXGludG9wXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmNcIiwgXCJcXFxcaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJkXCIsIFwiXFxcXGlpaW50XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMGZcIiwgXCJcXFxccHJvZFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjExXCIsIFwiXFxcXHN1bVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAyXCIsIFwiXFxcXGJpZ290aW1lc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTAxXCIsIFwiXFxcXGJpZ29wbHVzXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTJhMDBcIiwgXCJcXFxcYmlnb2RvdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjJlXCIsIFwiXFxcXG9pbnRcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgb3AsIFwiXFx1MjIyZlwiLCBcIlxcXFxvaWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyMjMwXCIsIFwiXFxcXG9paWludFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBvcCwgXCJcXHUyYTA2XCIsIFwiXFxcXGJpZ3NxY3VwXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG9wLCBcIlxcdTIyMmJcIiwgXCJcXFxcc21hbGxpbnRcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFx0ZXh0ZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxtYXRoZWxsaXBzaXNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgaW5uZXIsIFwiXFx1MjAyNlwiLCBcIlxcXFxsZG90c1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBpbm5lciwgXCJcXHUyMDI2XCIsIFwiXFxcXGxkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZWZcIiwgXCJcXFxcQGNkb3RzXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGlubmVyLCBcIlxcdTIyZjFcIiwgXCJcXFxcZGRvdHNcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMmVlXCIsIFwiXFxcXHZhcnZkb3RzXCIpOyAvLyBcXHZkb3RzIGlzIGEgbWFjcm9cblxuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNhXCIsIFwiXFxcXGFjdXRlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNiXCIsIFwiXFxcXGdyYXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMGE4XCIsIFwiXFxcXGRkb3RcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwN2VcIiwgXCJcXFxcdGlsZGVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzlcIiwgXCJcXFxcYmFyXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmQ4XCIsIFwiXFxcXGJyZXZlXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmM3XCIsIFwiXFxcXGNoZWNrXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMDVlXCIsIFwiXFxcXGhhdFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBhY2NlbnQsIFwiXFx1MjBkN1wiLCBcIlxcXFx2ZWNcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDlcIiwgXCJcXFxcZG90XCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIGFjY2VudCwgXCJcXHUwMmRhXCIsIFwiXFxcXG1hdGhyaW5nXCIpOyAvLyBcXGltYXRoIGFuZCBcXGptYXRoIHNob3VsZCBiZSBpbnZhcmlhbnQgdG8gXFxtYXRocm0sIFxcbWF0aGJmLCBldGMuLCBzbyB1c2UgUFVBXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcIlxcdWUxMzFcIiwgXCJcXFxcQGltYXRoXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIFwiXFx1ZTIzN1wiLCBcIlxcXFxAam1hdGhcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTMxXCIsIFwiXFx1MDEzMVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAyMzdcIiwgXCJcXHUwMjM3XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDEzMVwiLCBcIlxcXFxpXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDIzN1wiLCBcIlxcXFxqXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBkZlwiLCBcIlxcXFxzc1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwZTZcIiwgXCJcXFxcYWVcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMTUzXCIsIFwiXFxcXG9lXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBmOFwiLCBcIlxcXFxvXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBjNlwiLCBcIlxcXFxBRVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAxNTJcIiwgXCJcXFxcT0VcIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGQ4XCIsIFwiXFxcXE9cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyY2FcIiwgXCJcXFxcJ1wiKTsgLy8gYWN1dGVcblxuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIGFjY2VudCwgXCJcXHUwMmNiXCIsIFwiXFxcXGBcIik7IC8vIGdyYXZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjNlwiLCBcIlxcXFxeXCIpOyAvLyBjaXJjdW1mbGV4XG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkY1wiLCBcIlxcXFx+XCIpOyAvLyB0aWxkZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyYzlcIiwgXCJcXFxcPVwiKTsgLy8gbWFjcm9uXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkOFwiLCBcIlxcXFx1XCIpOyAvLyBicmV2ZVxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZDlcIiwgXCJcXFxcLlwiKTsgLy8gZG90IGFib3ZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDBiOFwiLCBcIlxcXFxjXCIpOyAvLyBjZWRpbGxhXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJkYVwiLCBcIlxcXFxyXCIpOyAvLyByaW5nIGFib3ZlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MDJjN1wiLCBcIlxcXFx2XCIpOyAvLyBjYXJvblxuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAwYThcIiwgJ1xcXFxcIicpOyAvLyBkaWFyZXNpc1xuXG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgYWNjZW50LCBcIlxcdTAyZGRcIiwgXCJcXFxcSFwiKTsgLy8gZG91YmxlIGFjdXRlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBhY2NlbnQsIFwiXFx1MjVlZlwiLCBcIlxcXFx0ZXh0Y2lyY2xlZFwiKTsgLy8gXFxiaWdjaXJjIGdseXBoXG4vLyBUaGVzZSBsaWdhdHVyZXMgYXJlIGRldGVjdGVkIGFuZCBjcmVhdGVkIGluIFBhcnNlci5qcydzIGBmb3JtTGlnYXR1cmVzYC5cblxudmFyIGxpZ2F0dXJlcyA9IHtcbiAgXCItLVwiOiB0cnVlLFxuICBcIi0tLVwiOiB0cnVlLFxuICBcImBgXCI6IHRydWUsXG4gIFwiJydcIjogdHJ1ZVxufTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTNcIiwgXCItLVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTNcIiwgXCJcXFxcdGV4dGVuZGFzaFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTRcIiwgXCItLS1cIiwgdHJ1ZSk7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE0XCIsIFwiXFxcXHRleHRlbWRhc2hcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUyMDE4XCIsIFwiYFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMThcIiwgXCJcXFxcdGV4dHF1b3RlbGVmdFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMTlcIiwgXCInXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MjAxOVwiLCBcIlxcXFx0ZXh0cXVvdGVyaWdodFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWNcIiwgXCJgYFwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWNcIiwgXCJcXFxcdGV4dHF1b3RlZGJsbGVmdFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWRcIiwgXCInJ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTIwMWRcIiwgXCJcXFxcdGV4dHF1b3RlZGJscmlnaHRcIik7IC8vICBcXGRlZ3JlZSBmcm9tIGdlbnN5bWIgcGFja2FnZVxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGIwXCIsIFwiXFxcXGRlZ3JlZVwiLCB0cnVlKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcZGVncmVlXCIpOyAvLyBcXHRleHRkZWdyZWUgZnJvbSBpbnB1dGVuYyBwYWNrYWdlXG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYjBcIiwgXCJcXFxcdGV4dGRlZ3JlZVwiLCB0cnVlKTsgLy8gVE9ETzogSW4gTGFUZVgsIFxccG91bmRzIGNhbiBnZW5lcmF0ZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgaW4gdGV4dCBhbmQgbWF0aFxuLy8gbW9kZSwgYnV0IGFtb25nIG91ciBmb250cywgb25seSBNYWluLVJlZ3VsYXIgZGVmaW5lcyB0aGlzIGNoYXJhY3RlciBcIjE2M1wiLlxuXG5kZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHBvdW5kc1wiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCB0ZXh0b3JkLCBcIlxcdTAwYTNcIiwgXCJcXFxcbWF0aHN0ZXJsaW5nXCIsIHRydWUpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwiXFx1MDBhM1wiLCBcIlxcXFxwb3VuZHNcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgXCJcXHUwMGEzXCIsIFwiXFxcXHRleHRzdGVybGluZ1wiLCB0cnVlKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiXFx1MjcyMFwiLCBcIlxcXFxtYWx0ZXNlXCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJcXHUyNzIwXCIsIFwiXFxcXG1hbHRlc2VcIik7IC8vIFRoZXJlIGFyZSBsb3RzIG9mIHN5bWJvbHMgd2hpY2ggYXJlIHRoZSBzYW1lLCBzbyB3ZSBhZGQgdGhlbSBpbiBhZnRlcndhcmRzLlxuLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiBtYXRoIG1vZGVcblxudmFyIG1hdGhUZXh0U3ltYm9scyA9IFwiMDEyMzQ1Njc4OS9ALlxcXCJcIjtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRoVGV4dFN5bWJvbHMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIGNoID0gbWF0aFRleHRTeW1ib2xzLmNoYXJBdChpKTtcbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIHRleHRvcmQsIGNoLCBjaCk7XG59IC8vIEFsbCBvZiB0aGVzZSBhcmUgdGV4dG9yZHMgaW4gdGV4dCBtb2RlXG5cblxudmFyIHRleHRTeW1ib2xzID0gXCIwMTIzNDU2Nzg5IUAqKCktPStcXFwiOzo/Ly4sXCI7XG5cbmZvciAodmFyIF9pID0gMDsgX2kgPCB0ZXh0U3ltYm9scy5sZW5ndGg7IF9pKyspIHtcbiAgdmFyIF9jaCA9IHRleHRTeW1ib2xzLmNoYXJBdChfaSk7XG5cbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaCwgX2NoKTtcbn0gLy8gQWxsIG9mIHRoZXNlIGFyZSB0ZXh0b3JkcyBpbiB0ZXh0IG1vZGUsIGFuZCBtYXRob3JkcyBpbiBtYXRoIG1vZGVcblxuXG52YXIgbGV0dGVycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuXG5mb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBsZXR0ZXJzLmxlbmd0aDsgX2kyKyspIHtcbiAgdmFyIF9jaDIgPSBsZXR0ZXJzLmNoYXJBdChfaTIpO1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gyLCBfY2gyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDIsIF9jaDIpO1xufSAvLyBCbGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdCBsZXR0ZXJzIGluIFVuaWNvZGUgcmFuZ2VcblxuXG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIkNcIiwgXCJcXHUyMTAyXCIpOyAvLyBibGFja2JvYXJkIGJvbGRcblxuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJDXCIsIFwiXFx1MjEwMlwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiSFwiLCBcIlxcdTIxMERcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIkhcIiwgXCJcXHUyMTBEXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJOXCIsIFwiXFx1MjExNVwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiTlwiLCBcIlxcdTIxMTVcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlBcIiwgXCJcXHUyMTE5XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJQXCIsIFwiXFx1MjExOVwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBhbXMsIHRleHRvcmQsIFwiUVwiLCBcIlxcdTIxMUFcIik7XG5kZWZpbmVTeW1ib2wodGV4dCwgYW1zLCB0ZXh0b3JkLCBcIlFcIiwgXCJcXHUyMTFBXCIpO1xuZGVmaW5lU3ltYm9sKG1hdGgsIGFtcywgdGV4dG9yZCwgXCJSXCIsIFwiXFx1MjExRFwiKTtcbmRlZmluZVN5bWJvbCh0ZXh0LCBhbXMsIHRleHRvcmQsIFwiUlwiLCBcIlxcdTIxMURcIik7XG5kZWZpbmVTeW1ib2wobWF0aCwgYW1zLCB0ZXh0b3JkLCBcIlpcIiwgXCJcXHUyMTI0XCIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIGFtcywgdGV4dG9yZCwgXCJaXCIsIFwiXFx1MjEyNFwiKTtcbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBpdGFsaWMgaCwgUGxhbmNrIGNvbnN0YW50XG5cbmRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCBtYXRob3JkLCBcImhcIiwgXCJcXHUyMTBFXCIpOyAvLyBUaGUgbmV4dCBsb29wIGxvYWRzIHdpZGUgKHN1cnJvZ2F0ZSBwYWlyKSBjaGFyYWN0ZXJzLlxuLy8gV2Ugc3VwcG9ydCBzb21lIGxldHRlcnMgaW4gdGhlIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuLy8gTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuLy8gU29tZSBlZGl0b3JzIGRvIG5vdCBkZWFsIHdlbGwgd2l0aCB3aWRlIGNoYXJhY3RlcnMuIFNvIGRvbid0IHdyaXRlIHRoZVxuLy8gc3RyaW5nIGludG8gdGhpcyBmaWxlLiBJbnN0ZWFkLCBjcmVhdGUgdGhlIHN0cmluZyBmcm9tIHRoZSBzdXJyb2dhdGUgcGFpci5cblxudmFyIHdpZGVDaGFyID0gXCJcIjtcblxuZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgbGV0dGVycy5sZW5ndGg7IF9pMysrKSB7XG4gIHZhciBfY2gzID0gbGV0dGVycy5jaGFyQXQoX2kzKTsgLy8gVGhlIGhleCBudW1iZXJzIGluIHRoZSBuZXh0IGxpbmUgYXJlIGEgc3Vycm9nYXRlIHBhaXIuXG4gIC8vIDB4RDgzNSBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgZm9yIGFsbCBsZXR0ZXJzIGluIHRoZSByYW5nZSB3ZSBzdXBwb3J0LlxuICAvLyAweERDMDAgaXMgdGhlIGxvdyBzdXJyb2dhdGUgZm9yIGJvbGQgQS5cblxuXG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REMwMCArIF9pMyk7IC8vIEEtWiBhLXogYm9sZFxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REMzNCArIF9pMyk7IC8vIEEtWiBhLXogaXRhbGljXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzY4ICsgX2kzKTsgLy8gQS1aIGEteiBib2xkIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQwNCArIF9pMyk7IC8vIEEtWiBhLXogRnJhY3R1clxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERBMCArIF9pMyk7IC8vIEEtWiBhLXogc2Fucy1zZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4RERENCArIF9pMyk7IC8vIEEtWiBhLXogc2FucyBib2xkXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERTA4ICsgX2kzKTsgLy8gQS1aIGEteiBzYW5zIGl0YWxpY1xuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REU3MCArIF9pMyk7IC8vIEEtWiBhLXogbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDMsIHdpZGVDaGFyKTtcblxuICBpZiAoX2kzIDwgMjYpIHtcbiAgICAvLyBLYVRlWCBmb250cyBoYXZlIG9ubHkgY2FwaXRhbCBsZXR0ZXJzIGZvciBibGFja2JvYXJkIGJvbGQgYW5kIHNjcmlwdC5cbiAgICAvLyBTZWUgZXhjZXB0aW9uIGZvciBrIGJlbG93LlxuICAgIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REQzOCArIF9pMyk7IC8vIEEtWiBkb3VibGUgc3RydWNrXG5cbiAgICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICAgIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2gzLCB3aWRlQ2hhcik7XG4gICAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhEQzlDICsgX2kzKTsgLy8gQS1aIHNjcmlwdFxuXG4gICAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDMsIHdpZGVDaGFyKTtcbiAgICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoMywgd2lkZUNoYXIpO1xuICB9IC8vIFRPRE86IEFkZCBib2xkIHNjcmlwdCB3aGVuIGl0IGlzIHN1cHBvcnRlZCBieSBhIEthVGVYIGZvbnQuXG5cbn0gLy8gXCJrXCIgaXMgdGhlIG9ubHkgZG91YmxlIHN0cnVjayBsb3dlciBjYXNlIGxldHRlciBpbiB0aGUgS2FUZVggZm9udHMuXG5cblxud2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERDVDKTsgLy8gayBkb3VibGUgc3RydWNrXG5cbmRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBcImtcIiwgd2lkZUNoYXIpO1xuZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIFwia1wiLCB3aWRlQ2hhcik7IC8vIE5leHQsIHNvbWUgd2lkZSBjaGFyYWN0ZXIgbnVtZXJhbHNcblxuZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgMTA7IF9pNCsrKSB7XG4gIHZhciBfY2g0ID0gX2k0LnRvU3RyaW5nKCk7XG5cbiAgd2lkZUNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgzNSwgMHhERkNFICsgX2k0KTsgLy8gMC05IGJvbGRcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRTIgKyBfaTQpOyAvLyAwLTkgc2FucyBzZXJpZlxuXG4gIGRlZmluZVN5bWJvbChtYXRoLCBtYWluLCBtYXRob3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIGRlZmluZVN5bWJvbCh0ZXh0LCBtYWluLCB0ZXh0b3JkLCBfY2g0LCB3aWRlQ2hhcik7XG4gIHdpZGVDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MzUsIDB4REZFQyArIF9pNCk7IC8vIDAtOSBib2xkIHNhbnNcblxuICBkZWZpbmVTeW1ib2wobWF0aCwgbWFpbiwgbWF0aG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNCwgd2lkZUNoYXIpO1xuICB3aWRlQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODM1LCAweERGRjYgKyBfaTQpOyAvLyAwLTkgbW9ub3NwYWNlXG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbiAgZGVmaW5lU3ltYm9sKHRleHQsIG1haW4sIHRleHRvcmQsIF9jaDQsIHdpZGVDaGFyKTtcbn0gLy8gV2UgYWRkIHRoZXNlIExhdGluLTEgbGV0dGVycyBhcyBzeW1ib2xzIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSxcbi8vIGJ1dCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIGZvbnQsIG5vciBhcmUgdGhleSBzdXBwb3J0ZWQgYnkgdGhlXG4vLyBVbmljb2RlIGFjY2VudCBtZWNoYW5pc20sIHNvIHRoZXkgZmFsbCBiYWNrIHRvIFRpbWVzIGZvbnQgYW5kIGxvb2sgdWdseS5cbi8vIFRPRE8oZWRlbWFpbmUpOiBGaXggdGhpcy5cblxuXG52YXIgZXh0cmFMYXRpbiA9IFwiXFx1MDBkMFxcdTAwZGVcXHUwMGZlXCI7XG5cbmZvciAodmFyIF9pNSA9IDA7IF9pNSA8IGV4dHJhTGF0aW4ubGVuZ3RoOyBfaTUrKykge1xuICB2YXIgX2NoNSA9IGV4dHJhTGF0aW4uY2hhckF0KF9pNSk7XG5cbiAgZGVmaW5lU3ltYm9sKG1hdGgsIG1haW4sIG1hdGhvcmQsIF9jaDUsIF9jaDUpO1xuICBkZWZpbmVTeW1ib2wodGV4dCwgbWFpbiwgdGV4dG9yZCwgX2NoNSwgX2NoNSk7XG59XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFVuaWNvZGUgcmFuZ2UgVSsxRDQwMCB0byBVKzFEN0ZGLFxuICogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzLlxuICpcbiAqIEZ1bmN0aW9uIHdpZGVDaGFyYWN0ZXJGb250IHRha2VzIGEgd2lkZSBjaGFyYWN0ZXIgYXMgaW5wdXQgYW5kIHJldHVybnNcbiAqIHRoZSBmb250IGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgcHJvcGVybHkuXG4gKi9cbi8qKlxuICogRGF0YSBiZWxvdyBpcyBmcm9tIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTFENDAwLnBkZlxuICogVGhhdCBkb2N1bWVudCBzb3J0cyBjaGFyYWN0ZXJzIGludG8gZ3JvdXBzIGJ5IGZvbnQgdHlwZSwgc2F5IGJvbGQgb3IgaXRhbGljLlxuICpcbiAqIEluIHRoZSBhcnJheXMgYmVsb3csIGVhY2ggc3ViYXJyYXkgY29uc2lzdHMgdGhyZWUgZWxlbWVudHM6XG4gKiAgICAgICogVGhlIENTUyBjbGFzcyBvZiB0aGF0IGdyb3VwIHdoZW4gaW4gbWF0aCBtb2RlLlxuICogICAgICAqIFRoZSBDU1MgY2xhc3Mgb2YgdGhhdCBncm91cCB3aGVuIGluIHRleHQgbW9kZS5cbiAqICAgICAgKiBUaGUgZm9udCBuYW1lLCBzbyB0aGF0IEthVGVYIGNhbiBnZXQgZm9udCBtZXRyaWNzLlxuICovXG5cbnZhciB3aWRlTGF0aW5MZXR0ZXJEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gQS1aIGJvbGQgdXByaWdodFxuW1wibWF0aGJmXCIsIFwidGV4dGJmXCIsIFwiTWFpbi1Cb2xkXCJdLCAvLyBhLXogYm9sZCB1cHJpZ2h0XG5bXCJtYXRobm9ybWFsXCIsIFwidGV4dGl0XCIsIFwiTWF0aC1JdGFsaWNcIl0sIC8vIEEtWiBpdGFsaWNcbltcIm1hdGhub3JtYWxcIiwgXCJ0ZXh0aXRcIiwgXCJNYXRoLUl0YWxpY1wiXSwgLy8gYS16IGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIEEtWiBib2xkIGl0YWxpY1xuW1wiYm9sZHN5bWJvbFwiLCBcImJvbGRzeW1ib2xcIiwgXCJNYWluLUJvbGRJdGFsaWNcIl0sIC8vIGEteiBib2xkIGl0YWxpY1xuLy8gTWFwIGZhbmN5IEEtWiBsZXR0ZXJzIHRvIHNjcmlwdCwgbm90IGNhbGxpZ3JhcGhpYy5cbi8vIFRoaXMgYWxpZ25zIHdpdGggdW5pY29kZS1tYXRoIGFuZCBtYXRoIGZvbnRzIChleGNlcHQgQ2FtYnJpYSBNYXRoKS5cbltcIm1hdGhzY3JcIiwgXCJ0ZXh0c2NyXCIsIFwiU2NyaXB0LVJlZ3VsYXJcIl0sIC8vIEEtWiBzY3JpcHRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IHNjcmlwdC4gIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgc2NyaXB0LiBObyBmb250XG5bXCJcIiwgXCJcIiwgXCJcIl0sIC8vIGEteiBib2xkIHNjcmlwdC4gTm8gZm9udFxuW1wibWF0aGZyYWtcIiwgXCJ0ZXh0ZnJha1wiLCBcIkZyYWt0dXItUmVndWxhclwiXSwgLy8gQS1aIEZyYWt0dXJcbltcIm1hdGhmcmFrXCIsIFwidGV4dGZyYWtcIiwgXCJGcmFrdHVyLVJlZ3VsYXJcIl0sIC8vIGEteiBGcmFrdHVyXG5bXCJtYXRoYmJcIiwgXCJ0ZXh0YmJcIiwgXCJBTVMtUmVndWxhclwiXSwgLy8gQS1aIGRvdWJsZS1zdHJ1Y2tcbltcIm1hdGhiYlwiLCBcInRleHRiYlwiLCBcIkFNUy1SZWd1bGFyXCJdLCAvLyBrIGRvdWJsZS1zdHJ1Y2tcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgRnJha3R1ciBObyBmb250IG1ldHJpY3NcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgRnJha3R1ci4gICBObyBmb250LlxuW1wibWF0aHNmXCIsIFwidGV4dHNmXCIsIFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIl0sIC8vIEEtWiBzYW5zLXNlcmlmXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gYS16IHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIEEtWiBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIGEteiBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGhpdHNmXCIsIFwidGV4dGl0c2ZcIiwgXCJTYW5zU2VyaWYtSXRhbGljXCJdLCAvLyBBLVogaXRhbGljIHNhbnMtc2VyaWZcbltcIm1hdGhpdHNmXCIsIFwidGV4dGl0c2ZcIiwgXCJTYW5zU2VyaWYtSXRhbGljXCJdLCAvLyBhLXogaXRhbGljIHNhbnMtc2VyaWZcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gQS1aIGJvbGQgaXRhbGljIHNhbnMuIE5vIGZvbnRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gYS16IGJvbGQgaXRhbGljIHNhbnMuIE5vIGZvbnRcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSwgLy8gQS1aIG1vbm9zcGFjZVxuW1wibWF0aHR0XCIsIFwidGV4dHR0XCIsIFwiVHlwZXdyaXRlci1SZWd1bGFyXCJdIC8vIGEteiBtb25vc3BhY2Vcbl07XG52YXIgd2lkZU51bWVyYWxEYXRhID0gW1tcIm1hdGhiZlwiLCBcInRleHRiZlwiLCBcIk1haW4tQm9sZFwiXSwgLy8gMC05IGJvbGRcbltcIlwiLCBcIlwiLCBcIlwiXSwgLy8gMC05IGRvdWJsZS1zdHJ1Y2suIE5vIEthVGVYIGZvbnQuXG5bXCJtYXRoc2ZcIiwgXCJ0ZXh0c2ZcIiwgXCJTYW5zU2VyaWYtUmVndWxhclwiXSwgLy8gMC05IHNhbnMtc2VyaWZcbltcIm1hdGhib2xkc2ZcIiwgXCJ0ZXh0Ym9sZHNmXCIsIFwiU2Fuc1NlcmlmLUJvbGRcIl0sIC8vIDAtOSBib2xkIHNhbnMtc2VyaWZcbltcIm1hdGh0dFwiLCBcInRleHR0dFwiLCBcIlR5cGV3cml0ZXItUmVndWxhclwiXSAvLyAwLTkgbW9ub3NwYWNlXG5dO1xudmFyIHdpZGVDaGFyYWN0ZXJGb250ID0gZnVuY3Rpb24gd2lkZUNoYXJhY3RlckZvbnQod2lkZUNoYXIsIG1vZGUpIHtcbiAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGNvZGVQb2ludEF0KCkuIFNvIHdvcmsgd2l0aCB0aGUgc3Vycm9nYXRlIHBhaXIuXG4gIHZhciBIID0gd2lkZUNoYXIuY2hhckNvZGVBdCgwKTsgLy8gaGlnaCBzdXJyb2dhdGVcblxuICB2YXIgTCA9IHdpZGVDaGFyLmNoYXJDb2RlQXQoMSk7IC8vIGxvdyBzdXJyb2dhdGVcblxuICB2YXIgY29kZVBvaW50ID0gKEggLSAweEQ4MDApICogMHg0MDAgKyAoTCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB2YXIgaiA9IG1vZGUgPT09IFwibWF0aFwiID8gMCA6IDE7IC8vIGNvbHVtbiBpbmRleCBmb3IgQ1NTIGNsYXNzLlxuXG4gIGlmICgweDFENDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPCAweDFENkE0KSB7XG4gICAgLy8gd2lkZUxhdGluTGV0dGVyRGF0YSBjb250YWlucyBleGFjdGx5IDI2IGNoYXJzIG9uIGVhY2ggcm93LlxuICAgIC8vIFNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHJlbGV2YW50IHJvdy4gTm8gdHJhdmVyc2UgbmVjZXNzYXJ5LlxuICAgIHZhciBpID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxRDQwMCkgLyAyNik7XG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhW2ldW2pdXTtcbiAgfSBlbHNlIGlmICgweDFEN0NFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRDdGRikge1xuICAgIC8vIE51bWVyYWxzLCB0ZW4gcGVyIHJvdy5cbiAgICB2YXIgX2kgPSBNYXRoLmZsb29yKChjb2RlUG9pbnQgLSAweDFEN0NFKSAvIDEwKTtcblxuICAgIHJldHVybiBbd2lkZU51bWVyYWxEYXRhW19pXVsyXSwgd2lkZU51bWVyYWxEYXRhW19pXVtqXV07XG4gIH0gZWxzZSBpZiAoY29kZVBvaW50ID09PSAweDFENkE1IHx8IGNvZGVQb2ludCA9PT0gMHgxRDZBNikge1xuICAgIC8vIGRvdGxlc3MgaSBvciBqXG4gICAgcmV0dXJuIFt3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdWzJdLCB3aWRlTGF0aW5MZXR0ZXJEYXRhWzBdW2pdXTtcbiAgfSBlbHNlIGlmICgweDFENkE2IDwgY29kZVBvaW50ICYmIGNvZGVQb2ludCA8IDB4MUQ3Q0UpIHtcbiAgICAvLyBHcmVlayBsZXR0ZXJzLiBOb3Qgc3VwcG9ydGVkLCB5ZXQuXG4gICAgcmV0dXJuIFtcIlwiLCBcIlwiXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSB3aWRlIGNoYXJhY3RlcnMgb3V0c2lkZSAxRDQwMOKAkzFEN0ZGLlxuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiBcIiArIHdpZGVDaGFyKTtcbiAgfVxufTtcblxuLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBnaXZlbiBzeW1ib2wgaW4gZm9udE1ldHJpY3MsIGFmdGVyIGFwcGx5aW5nIGFueSBzeW1ib2xcbiAqIHJlcGxhY2VtZW50cyBkZWZpbmVkIGluIHN5bWJvbC5qc1xuICovXG52YXIgbG9va3VwU3ltYm9sID0gZnVuY3Rpb24gbG9va3VwU3ltYm9sKHZhbHVlLCAvLyBUT0RPKCM5NjMpOiBVc2UgYSB1bmlvbiB0eXBlIGZvciB0aGlzLlxuZm9udE5hbWUsIG1vZGUpIHtcbiAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgcmVwbGFjZWQgdmFsdWUgZnJvbSBzeW1ib2wuanNcbiAgaWYgKHN5bWJvbHNbbW9kZV1bdmFsdWVdICYmIHN5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2UpIHtcbiAgICB2YWx1ZSA9IHN5bWJvbHNbbW9kZV1bdmFsdWVdLnJlcGxhY2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBtZXRyaWNzOiBnZXRDaGFyYWN0ZXJNZXRyaWNzKHZhbHVlLCBmb250TmFtZSwgbW9kZSlcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3ltYm9sTm9kZSBhZnRlciB0cmFuc2xhdGlvbiB2aWEgdGhlIGxpc3Qgb2Ygc3ltYm9scyBpbiBzeW1ib2xzLmpzLlxuICogQ29ycmVjdGx5IHB1bGxzIG91dCBtZXRyaWNzIGZvciB0aGUgY2hhcmFjdGVyLCBhbmQgb3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2ZcbiAqIGNsYXNzZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIG5vZGUuXG4gKlxuICogVE9ETzogbWFrZSBhcmd1bWVudCBvcmRlciBjbG9zZXIgdG8gbWFrZVNwYW5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKiBUT0RPKCM5NTMpOiBNYWtlIGBvcHRpb25zYCBtYW5kYXRvcnkgYW5kIGFsd2F5cyBwYXNzIGl0IGluLlxuICovXG5cblxudmFyIG1ha2VTeW1ib2wgPSBmdW5jdGlvbiBtYWtlU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcykge1xuICB2YXIgbG9va3VwID0gbG9va3VwU3ltYm9sKHZhbHVlLCBmb250TmFtZSwgbW9kZSk7XG4gIHZhciBtZXRyaWNzID0gbG9va3VwLm1ldHJpY3M7XG4gIHZhbHVlID0gbG9va3VwLnZhbHVlO1xuICB2YXIgc3ltYm9sTm9kZTtcblxuICBpZiAobWV0cmljcykge1xuICAgIHZhciBpdGFsaWMgPSBtZXRyaWNzLml0YWxpYztcblxuICAgIGlmIChtb2RlID09PSBcInRleHRcIiB8fCBvcHRpb25zICYmIG9wdGlvbnMuZm9udCA9PT0gXCJtYXRoaXRcIikge1xuICAgICAgaXRhbGljID0gMDtcbiAgICB9XG5cbiAgICBzeW1ib2xOb2RlID0gbmV3IFN5bWJvbE5vZGUodmFsdWUsIG1ldHJpY3MuaGVpZ2h0LCBtZXRyaWNzLmRlcHRoLCBpdGFsaWMsIG1ldHJpY3Muc2tldywgbWV0cmljcy53aWR0aCwgY2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyhlbWlseSk6IEZpZ3VyZSBvdXQgYSBnb29kIHdheSB0byBvbmx5IHByaW50IHRoaXMgaW4gZGV2ZWxvcG1lbnRcbiAgICB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oXCJObyBjaGFyYWN0ZXIgbWV0cmljcyBcIiArIChcImZvciAnXCIgKyB2YWx1ZSArIFwiJyBpbiBzdHlsZSAnXCIgKyBmb250TmFtZSArIFwiJyBhbmQgbW9kZSAnXCIgKyBtb2RlICsgXCInXCIpKTtcbiAgICBzeW1ib2xOb2RlID0gbmV3IFN5bWJvbE5vZGUodmFsdWUsIDAsIDAsIDAsIDAsIDAsIGNsYXNzZXMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBzeW1ib2xOb2RlLm1heEZvbnRTaXplID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlLmlzVGlnaHQoKSkge1xuICAgICAgc3ltYm9sTm9kZS5jbGFzc2VzLnB1c2goXCJtdGlnaHRcIik7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBzeW1ib2xOb2RlLnN0eWxlLmNvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bWJvbE5vZGU7XG59O1xuLyoqXG4gKiBNYWtlcyBhIHN5bWJvbCBpbiBNYWluLVJlZ3VsYXIgb3IgQU1TLVJlZ3VsYXIuXG4gKiBVc2VkIGZvciByZWwsIGJpbiwgb3BlbiwgY2xvc2UsIGlubmVyLCBhbmQgcHVuY3QuXG4gKi9cblxuXG52YXIgbWF0aHN5bSA9IGZ1bmN0aW9uIG1hdGhzeW0odmFsdWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMpIHtcbiAgaWYgKGNsYXNzZXMgPT09IHZvaWQgMCkge1xuICAgIGNsYXNzZXMgPSBbXTtcbiAgfVxuXG4gIC8vIERlY2lkZSB3aGF0IGZvbnQgdG8gcmVuZGVyIHRoZSBzeW1ib2wgaW4gYnkgaXRzIGVudHJ5IGluIHRoZSBzeW1ib2xzXG4gIC8vIHRhYmxlLlxuICAvLyBIYXZlIGEgc3BlY2lhbCBjYXNlIGZvciB3aGVuIHRoZSB2YWx1ZSA9IFxcIGJlY2F1c2UgdGhlIFxcIGlzIHVzZWQgYXMgYVxuICAvLyB0ZXh0b3JkIGluIHVuc3VwcG9ydGVkIGNvbW1hbmQgZXJyb3JzIGJ1dCBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgcmVndWxhclxuICAvLyB0ZXh0IG9yZGluYWwgYW5kIGlzIHRoZXJlZm9yZSBub3QgcHJlc2VudCBhcyBhIHN5bWJvbCBpbiB0aGUgc3ltYm9sc1xuICAvLyB0YWJsZSBmb3IgdGV4dCwgYXMgd2VsbCBhcyBhIHNwZWNpYWwgY2FzZSBmb3IgYm9sZHN5bWJvbCBiZWNhdXNlIGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBib2xkICsgYW5kIC1cbiAgaWYgKG9wdGlvbnMuZm9udCA9PT0gXCJib2xkc3ltYm9sXCIgJiYgbG9va3VwU3ltYm9sKHZhbHVlLCBcIk1haW4tQm9sZFwiLCBtb2RlKS5tZXRyaWNzKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodmFsdWUsIFwiTWFpbi1Cb2xkXCIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFtcIm1hdGhiZlwiXSkpO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlxcXFxcIiB8fCBzeW1ib2xzW21vZGVdW3ZhbHVlXS5mb250ID09PSBcIm1haW5cIikge1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHZhbHVlLCBcIk1haW4tUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbWFrZVN5bWJvbCh2YWx1ZSwgXCJBTVMtUmVndWxhclwiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJhbXNybVwiXSkpO1xuICB9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSB0d28gZm9udCBuYW1lcyAoTWFpbi1Cb2xkIGFuZCBNYXRoLUJvbGRJdGFsaWMpIGFuZFxuICogY29ycmVzcG9uZGluZyBzdHlsZSB0YWdzIChtYXRoYmYgb3IgYm9sZHN5bWJvbCkgdG8gdXNlIGZvciBmb250IFwiYm9sZHN5bWJvbFwiLFxuICogZGVwZW5kaW5nIG9uIHRoZSBzeW1ib2wuICBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZvbnRNYXAgZm9yIGZvbnRcbiAqIFwiYm9sZHN5bWJvbFwiLlxuICovXG5cblxudmFyIGJvbGRzeW1ib2wgPSBmdW5jdGlvbiBib2xkc3ltYm9sKHZhbHVlLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKSB7XG4gIGlmICh0eXBlICE9PSBcInRleHRvcmRcIiAmJiBsb29rdXBTeW1ib2wodmFsdWUsIFwiTWF0aC1Cb2xkSXRhbGljXCIsIG1vZGUpLm1ldHJpY3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udE5hbWU6IFwiTWF0aC1Cb2xkSXRhbGljXCIsXG4gICAgICBmb250Q2xhc3M6IFwiYm9sZHN5bWJvbFwiXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21lIGdseXBocyBkbyBub3QgZXhpc3QgaW4gTWF0aC1Cb2xkSXRhbGljIHNvIHdlIG5lZWQgdG8gdXNlXG4gICAgLy8gTWFpbi1Cb2xkIGluc3RlYWQuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnROYW1lOiBcIk1haW4tQm9sZFwiLFxuICAgICAgZm9udENsYXNzOiBcIm1hdGhiZlwiXG4gICAgfTtcbiAgfVxufTtcbi8qKlxuICogTWFrZXMgZWl0aGVyIGEgbWF0aG9yZCBvciB0ZXh0b3JkIGluIHRoZSBjb3JyZWN0IGZvbnQgYW5kIGNvbG9yLlxuICovXG5cblxudmFyIG1ha2VPcmQgPSBmdW5jdGlvbiBtYWtlT3JkKGdyb3VwLCBvcHRpb25zLCB0eXBlKSB7XG4gIHZhciBtb2RlID0gZ3JvdXAubW9kZTtcbiAgdmFyIHRleHQgPSBncm91cC50ZXh0O1xuICB2YXIgY2xhc3NlcyA9IFtcIm1vcmRcIl07IC8vIE1hdGggbW9kZSBvciBPbGQgZm9udCAoaS5lLiBcXHJtKVxuXG4gIHZhciBpc0ZvbnQgPSBtb2RlID09PSBcIm1hdGhcIiB8fCBtb2RlID09PSBcInRleHRcIiAmJiBvcHRpb25zLmZvbnQ7XG4gIHZhciBmb250T3JGYW1pbHkgPSBpc0ZvbnQgPyBvcHRpb25zLmZvbnQgOiBvcHRpb25zLmZvbnRGYW1pbHk7XG5cbiAgaWYgKHRleHQuY2hhckNvZGVBdCgwKSA9PT0gMHhEODM1KSB7XG4gICAgLy8gc3Vycm9nYXRlIHBhaXJzIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIHZhciBbd2lkZUZvbnROYW1lLCB3aWRlRm9udENsYXNzXSA9IHdpZGVDaGFyYWN0ZXJGb250KHRleHQsIG1vZGUpO1xuICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIHdpZGVGb250TmFtZSwgbW9kZSwgb3B0aW9ucywgY2xhc3Nlcy5jb25jYXQod2lkZUZvbnRDbGFzcykpO1xuICB9IGVsc2UgaWYgKGZvbnRPckZhbWlseSkge1xuICAgIHZhciBmb250TmFtZTtcbiAgICB2YXIgZm9udENsYXNzZXM7XG5cbiAgICBpZiAoZm9udE9yRmFtaWx5ID09PSBcImJvbGRzeW1ib2xcIikge1xuICAgICAgdmFyIGZvbnREYXRhID0gYm9sZHN5bWJvbCh0ZXh0LCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLCB0eXBlKTtcbiAgICAgIGZvbnROYW1lID0gZm9udERhdGEuZm9udE5hbWU7XG4gICAgICBmb250Q2xhc3NlcyA9IFtmb250RGF0YS5mb250Q2xhc3NdO1xuICAgIH0gZWxzZSBpZiAoaXNGb250KSB7XG4gICAgICBmb250TmFtZSA9IGZvbnRNYXBbZm9udE9yRmFtaWx5XS5mb250TmFtZTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvbnROYW1lID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoZm9udE9yRmFtaWx5LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTtcbiAgICAgIGZvbnRDbGFzc2VzID0gW2ZvbnRPckZhbWlseSwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZV07XG4gICAgfVxuXG4gICAgaWYgKGxvb2t1cFN5bWJvbCh0ZXh0LCBmb250TmFtZSwgbW9kZSkubWV0cmljcykge1xuICAgICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSk7XG4gICAgfSBlbHNlIGlmIChsaWdhdHVyZXMuaGFzT3duUHJvcGVydHkodGV4dCkgJiYgZm9udE5hbWUuc2xpY2UoMCwgMTApID09PSBcIlR5cGV3cml0ZXJcIikge1xuICAgICAgLy8gRGVjb25zdHJ1Y3QgbGlnYXR1cmVzIGluIG1vbm9zcGFjZSBmb250cyAoXFx0ZXh0dHQsIFxcdHQpLlxuICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJ0cy5wdXNoKG1ha2VTeW1ib2wodGV4dFtpXSwgZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KGZvbnRDbGFzc2VzKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZUZyYWdtZW50KHBhcnRzKTtcbiAgICB9XG4gIH0gLy8gTWFrZXMgYSBzeW1ib2wgaW4gdGhlIGRlZmF1bHQgZm9udCBmb3IgbWF0aG9yZHMgYW5kIHRleHRvcmRzLlxuXG5cbiAgaWYgKHR5cGUgPT09IFwibWF0aG9yZFwiKSB7XG4gICAgcmV0dXJuIG1ha2VTeW1ib2wodGV4dCwgXCJNYXRoLUl0YWxpY1wiLCBtb2RlLCBvcHRpb25zLCBjbGFzc2VzLmNvbmNhdChbXCJtYXRobm9ybWFsXCJdKSk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJ0ZXh0b3JkXCIpIHtcbiAgICB2YXIgZm9udCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5mb250O1xuXG4gICAgaWYgKGZvbnQgPT09IFwiYW1zXCIpIHtcbiAgICAgIHZhciBfZm9udE5hbWUgPSByZXRyaWV2ZVRleHRGb250TmFtZShcImFtc3JtXCIsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpO1xuXG4gICAgICByZXR1cm4gbWFrZVN5bWJvbCh0ZXh0LCBfZm9udE5hbWUsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KFwiYW1zcm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSkpO1xuICAgIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYWluXCIgfHwgIWZvbnQpIHtcbiAgICAgIHZhciBfZm9udE5hbWUyID0gcmV0cmlldmVUZXh0Rm9udE5hbWUoXCJ0ZXh0cm1cIiwgb3B0aW9ucy5mb250V2VpZ2h0LCBvcHRpb25zLmZvbnRTaGFwZSk7XG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTIsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9udHMgYWRkZWQgYnkgcGx1Z2luc1xuICAgICAgdmFyIF9mb250TmFtZTMgPSByZXRyaWV2ZVRleHRGb250TmFtZShmb250LCBvcHRpb25zLmZvbnRXZWlnaHQsIG9wdGlvbnMuZm9udFNoYXBlKTsgLy8gV2UgYWRkIGZvbnQgbmFtZSBhcyBhIGNzcyBjbGFzc1xuXG5cbiAgICAgIHJldHVybiBtYWtlU3ltYm9sKHRleHQsIF9mb250TmFtZTMsIG1vZGUsIG9wdGlvbnMsIGNsYXNzZXMuY29uY2F0KF9mb250TmFtZTMsIG9wdGlvbnMuZm9udFdlaWdodCwgb3B0aW9ucy5mb250U2hhcGUpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCB0eXBlOiBcIiArIHR5cGUgKyBcIiBpbiBtYWtlT3JkXCIpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgc3Vic2VxdWVudCBzeW1ib2xOb2RlcyBoYXZlIHRoZSBzYW1lIGNsYXNzZXMsIHNrZXcsIG1heEZvbnQsXG4gKiBhbmQgc3R5bGVzLlxuICovXG5cblxudmFyIGNhbkNvbWJpbmUgPSAocHJldiwgbmV4dCkgPT4ge1xuICBpZiAoY3JlYXRlQ2xhc3MocHJldi5jbGFzc2VzKSAhPT0gY3JlYXRlQ2xhc3MobmV4dC5jbGFzc2VzKSB8fCBwcmV2LnNrZXcgIT09IG5leHQuc2tldyB8fCBwcmV2Lm1heEZvbnRTaXplICE9PSBuZXh0Lm1heEZvbnRTaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHByZXYgYW5kIG5leHQgYm90aCBhcmUganVzdCBcIm1iaW5cInMgb3IgXCJtb3JkXCJzIHdlIGRvbid0IGNvbWJpbmUgdGhlbVxuICAvLyBzbyB0aGF0IHRoZSBwcm9wZXIgc3BhY2luZyBjYW4gYmUgcHJlc2VydmVkLlxuXG5cbiAgaWYgKHByZXYuY2xhc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgY2xzID0gcHJldi5jbGFzc2VzWzBdO1xuXG4gICAgaWYgKGNscyA9PT0gXCJtYmluXCIgfHwgY2xzID09PSBcIm1vcmRcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIHN0eWxlIGluIHByZXYuc3R5bGUpIHtcbiAgICBpZiAocHJldi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZSkgJiYgcHJldi5zdHlsZVtzdHlsZV0gIT09IG5leHQuc3R5bGVbc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX3N0eWxlIGluIG5leHQuc3R5bGUpIHtcbiAgICBpZiAobmV4dC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShfc3R5bGUpICYmIHByZXYuc3R5bGVbX3N0eWxlXSAhPT0gbmV4dC5zdHlsZVtfc3R5bGVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuLyoqXG4gKiBDb21iaW5lIGNvbnNlY3V0aXZlIGRvbVRyZWUuc3ltYm9sTm9kZXMgaW50byBhIHNpbmdsZSBzeW1ib2xOb2RlLlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBhcmd1bWVudC5cbiAqL1xuXG5cbnZhciB0cnlDb21iaW5lQ2hhcnMgPSBjaGFycyA9PiB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIHByZXYgPSBjaGFyc1tpXTtcbiAgICB2YXIgbmV4dCA9IGNoYXJzW2kgKyAxXTtcblxuICAgIGlmIChwcmV2IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBuZXh0IGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBjYW5Db21iaW5lKHByZXYsIG5leHQpKSB7XG4gICAgICBwcmV2LnRleHQgKz0gbmV4dC50ZXh0O1xuICAgICAgcHJldi5oZWlnaHQgPSBNYXRoLm1heChwcmV2LmhlaWdodCwgbmV4dC5oZWlnaHQpO1xuICAgICAgcHJldi5kZXB0aCA9IE1hdGgubWF4KHByZXYuZGVwdGgsIG5leHQuZGVwdGgpOyAvLyBVc2UgdGhlIGxhc3QgY2hhcmFjdGVyJ3MgaXRhbGljIGNvcnJlY3Rpb24gc2luY2Ugd2UgdXNlXG4gICAgICAvLyBpdCB0byBhZGQgcGFkZGluZyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYW4gY3JlYXRlZCBmcm9tXG4gICAgICAvLyB0aGUgY29tYmluZWQgY2hhcmFjdGVycy5cblxuICAgICAgcHJldi5pdGFsaWMgPSBuZXh0Lml0YWxpYztcbiAgICAgIGNoYXJzLnNwbGljZShpICsgMSwgMSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoYXJzO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoZWlnaHQsIGRlcHRoLCBhbmQgbWF4Rm9udFNpemUgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHNcbiAqIGNoaWxkcmVuLlxuICovXG5cblxudmFyIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuID0gZnVuY3Rpb24gc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZWxlbSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIG1heEZvbnRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtLmNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKGNoaWxkLmhlaWdodCA+IGhlaWdodCkge1xuICAgICAgaGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5kZXB0aCA+IGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGNoaWxkLmRlcHRoO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC5tYXhGb250U2l6ZSA+IG1heEZvbnRTaXplKSB7XG4gICAgICBtYXhGb250U2l6ZSA9IGNoaWxkLm1heEZvbnRTaXplO1xuICAgIH1cbiAgfVxuXG4gIGVsZW0uaGVpZ2h0ID0gaGVpZ2h0O1xuICBlbGVtLmRlcHRoID0gZGVwdGg7XG4gIGVsZW0ubWF4Rm9udFNpemUgPSBtYXhGb250U2l6ZTtcbn07XG4vKipcbiAqIE1ha2VzIGEgc3BhbiB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCBvcHRpb25zLlxuICpcbiAqIFRPRE8oIzk1Myk6IEVuc3VyZSB0aGF0IGBvcHRpb25zYCBpcyBhbHdheXMgcHJvdmlkZWQgKGN1cnJlbnRseSBzb21lIGNhbGxcbiAqIHNpdGVzIGRvbid0IHBhc3MgaXQpIGFuZCBtYWtlIHRoZSB0eXBlIGJlbG93IG1hbmRhdG9yeS5cbiAqIFRPRE86IGFkZCBhIHNlcGFyYXRlIGFyZ3VtZW50IGZvciBtYXRoIGNsYXNzIChlLmcuIGBtb3BgLCBgbWJpbmApLCB3aGljaFxuICogc2hvdWxkIGlmIHByZXNlbnQgY29tZSBmaXJzdCBpbiBgY2xhc3Nlc2AuXG4gKi9cblxuXG52YXIgbWFrZVNwYW4kMiA9IGZ1bmN0aW9uIG1ha2VTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSkge1xuICB2YXIgc3BhbiA9IG5ldyBTcGFuKGNsYXNzZXMsIGNoaWxkcmVuLCBvcHRpb25zLCBzdHlsZSk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKHNwYW4pO1xuICByZXR1cm4gc3Bhbjtcbn07IC8vIFNWRyBvbmUgaXMgc2ltcGxlciAtLSBkb2Vzbid0IHJlcXVpcmUgaGVpZ2h0LCBkZXB0aCwgbWF4LWZvbnQgc2V0dGluZy5cbi8vIFRoaXMgaXMgYWxzbyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgdHlwZXNhZmV0eS5cblxuXG52YXIgbWFrZVN2Z1NwYW4gPSAoY2xhc3NlcywgY2hpbGRyZW4sIG9wdGlvbnMsIHN0eWxlKSA9PiBuZXcgU3BhbihjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucywgc3R5bGUpO1xuXG52YXIgbWFrZUxpbmVTcGFuID0gZnVuY3Rpb24gbWFrZUxpbmVTcGFuKGNsYXNzTmFtZSwgb3B0aW9ucywgdGhpY2tuZXNzKSB7XG4gIHZhciBsaW5lID0gbWFrZVNwYW4kMihbY2xhc3NOYW1lXSwgW10sIG9wdGlvbnMpO1xuICBsaW5lLmhlaWdodCA9IE1hdGgubWF4KHRoaWNrbmVzcyB8fCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsIG9wdGlvbnMubWluUnVsZVRoaWNrbmVzcyk7XG4gIGxpbmUuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSBtYWtlRW0obGluZS5oZWlnaHQpO1xuICBsaW5lLm1heEZvbnRTaXplID0gMS4wO1xuICByZXR1cm4gbGluZTtcbn07XG4vKipcbiAqIE1ha2VzIGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBocmVmLCBsaXN0IG9mIGNsYXNzZXMsIGxpc3Qgb2YgY2hpbGRyZW4sXG4gKiBhbmQgb3B0aW9ucy5cbiAqL1xuXG5cbnZhciBtYWtlQW5jaG9yID0gZnVuY3Rpb24gbWFrZUFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucykge1xuICB2YXIgYW5jaG9yID0gbmV3IEFuY2hvcihocmVmLCBjbGFzc2VzLCBjaGlsZHJlbiwgb3B0aW9ucyk7XG4gIHNpemVFbGVtZW50RnJvbUNoaWxkcmVuKGFuY2hvcik7XG4gIHJldHVybiBhbmNob3I7XG59O1xuLyoqXG4gKiBNYWtlcyBhIGRvY3VtZW50IGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG52YXIgbWFrZUZyYWdtZW50ID0gZnVuY3Rpb24gbWFrZUZyYWdtZW50KGNoaWxkcmVuKSB7XG4gIHZhciBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbiAgc2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59O1xuLyoqXG4gKiBXcmFwcyBncm91cCBpbiBhIHNwYW4gaWYgaXQncyBhIGRvY3VtZW50IGZyYWdtZW50LCBhbGxvd2luZyB0byBhcHBseSBjbGFzc2VzXG4gKiBhbmQgc3R5bGVzXG4gKi9cblxuXG52YXIgd3JhcEZyYWdtZW50ID0gZnVuY3Rpb24gd3JhcEZyYWdtZW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIGlmIChncm91cCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMihbXSwgW2dyb3VwXSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59OyAvLyBUaGVzZSBhcmUgZXhhY3Qgb2JqZWN0IHR5cGVzIHRvIGNhdGNoIHR5cG9zIGluIHRoZSBuYW1lcyBvZiB0aGUgb3B0aW9uYWwgZmllbGRzLlxuXG5cbi8vIENvbXB1dGVzIHRoZSB1cGRhdGVkIGBjaGlsZHJlbmAgbGlzdCBhbmQgdGhlIG92ZXJhbGwgZGVwdGguXG4vL1xuLy8gVGhpcyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1ha2VWTGlzdCBtYWtlcyBpdCBlYXNpZXIgdG8gZW5mb3JjZSB0eXBlIHNhZmV0eSBieVxuLy8gYWxsb3dpbmcgZWFybHkgZXhpdHMgKHJldHVybnMpIGluIHRoZSBsb2dpYy5cbnZhciBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGggPSBmdW5jdGlvbiBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMucG9zaXRpb25UeXBlID09PSBcImluZGl2aWR1YWxTaGlmdFwiKSB7XG4gICAgdmFyIG9sZENoaWxkcmVuID0gcGFyYW1zLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbiA9IFtvbGRDaGlsZHJlblswXV07IC8vIEFkZCBpbiBrZXJucyB0byB0aGUgbGlzdCBvZiBwYXJhbXMuY2hpbGRyZW4gdG8gZ2V0IGVhY2ggZWxlbWVudCB0byBiZVxuICAgIC8vIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3Qgc3BlY2lmaWVkIHNoaWZ0XG5cbiAgICB2YXIgX2RlcHRoID0gLW9sZENoaWxkcmVuWzBdLnNoaWZ0IC0gb2xkQ2hpbGRyZW5bMF0uZWxlbS5kZXB0aDtcblxuICAgIHZhciBjdXJyUG9zID0gX2RlcHRoO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRpZmYgPSAtb2xkQ2hpbGRyZW5baV0uc2hpZnQgLSBjdXJyUG9zIC0gb2xkQ2hpbGRyZW5baV0uZWxlbS5kZXB0aDtcbiAgICAgIHZhciBzaXplID0gZGlmZiAtIChvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5oZWlnaHQgKyBvbGRDaGlsZHJlbltpIC0gMV0uZWxlbS5kZXB0aCk7XG4gICAgICBjdXJyUG9zID0gY3VyclBvcyArIGRpZmY7XG4gICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemVcbiAgICAgIH0pO1xuICAgICAgY2hpbGRyZW4ucHVzaChvbGRDaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVwdGg6IF9kZXB0aFxuICAgIH07XG4gIH1cblxuICB2YXIgZGVwdGg7XG5cbiAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwidG9wXCIpIHtcbiAgICAvLyBXZSBhbHdheXMgc3RhcnQgYXQgdGhlIGJvdHRvbSwgc28gY2FsY3VsYXRlIHRoZSBib3R0b20gYnkgYWRkaW5nIHVwXG4gICAgLy8gYWxsIHRoZSBzaXplc1xuICAgIHZhciBib3R0b20gPSBwYXJhbXMucG9zaXRpb25EYXRhO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHBhcmFtcy5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmFtcy5jaGlsZHJlbltfaV07XG4gICAgICBib3R0b20gLT0gY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIgPyBjaGlsZC5zaXplIDogY2hpbGQuZWxlbS5oZWlnaHQgKyBjaGlsZC5lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIGRlcHRoID0gYm90dG9tO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiYm90dG9tXCIpIHtcbiAgICBkZXB0aCA9IC1wYXJhbXMucG9zaXRpb25EYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdENoaWxkID0gcGFyYW1zLmNoaWxkcmVuWzBdO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQudHlwZSAhPT0gXCJlbGVtXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgXCJlbGVtXCIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwic2hpZnRcIikge1xuICAgICAgZGVwdGggPSAtZmlyc3RDaGlsZC5lbGVtLmRlcHRoIC0gcGFyYW1zLnBvc2l0aW9uRGF0YTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wb3NpdGlvblR5cGUgPT09IFwiZmlyc3RCYXNlbGluZVwiKSB7XG4gICAgICBkZXB0aCA9IC1maXJzdENoaWxkLmVsZW0uZGVwdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcG9zaXRpb25UeXBlIFwiICsgcGFyYW1zLnBvc2l0aW9uVHlwZSArIFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkcmVuOiBwYXJhbXMuY2hpbGRyZW4sXG4gICAgZGVwdGhcbiAgfTtcbn07XG4vKipcbiAqIE1ha2VzIGEgdmVydGljYWwgbGlzdCBieSBzdGFja2luZyBlbGVtZW50cyBhbmQga2VybnMgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gKiBBbGxvd3MgZm9yIG1hbnkgZGlmZmVyZW50IHdheXMgb2Ygc3BlY2lmeWluZyB0aGUgcG9zaXRpb25pbmcgbWV0aG9kLlxuICpcbiAqIFNlZSBWTGlzdFBhcmFtIGRvY3VtZW50YXRpb24gYWJvdmUuXG4gKi9cblxuXG52YXIgbWFrZVZMaXN0ID0gZnVuY3Rpb24gbWFrZVZMaXN0KHBhcmFtcywgb3B0aW9ucykge1xuICB2YXIge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlcHRoXG4gIH0gPSBnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgocGFyYW1zKTsgLy8gQ3JlYXRlIGEgc3RydXQgdGhhdCBpcyB0YWxsZXIgdGhhbiBhbnkgbGlzdCBpdGVtLiBUaGUgc3RydXQgaXMgYWRkZWQgdG9cbiAgLy8gZWFjaCBpdGVtLCB3aGVyZSBpdCB3aWxsIGRldGVybWluZSB0aGUgaXRlbSdzIGJhc2VsaW5lLiBTaW5jZSBpdCBoYXNcbiAgLy8gYG92ZXJmbG93OmhpZGRlbmAsIHRoZSBzdHJ1dCdzIHRvcCBlZGdlIHdpbGwgc2l0IG9uIHRoZSBpdGVtJ3MgbGluZSBib3gnc1xuICAvLyB0b3AgZWRnZSBhbmQgdGhlIHN0cnV0J3MgYm90dG9tIGVkZ2Ugd2lsbCBzaXQgb24gdGhlIGl0ZW0ncyBiYXNlbGluZSxcbiAgLy8gd2l0aCBubyBhZGRpdGlvbmFsIGxpbmUtaGVpZ2h0IHNwYWNpbmcuIFRoaXMgYWxsb3dzIHRoZSBpdGVtIGJhc2VsaW5lIHRvXG4gIC8vIGJlIHBvc2l0aW9uZWQgcHJlY2lzZWx5IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgZm9udCBhc2NlbnQgYW5kXG4gIC8vIGxpbmUtaGVpZ2h0LlxuXG4gIHZhciBwc3RydXRTaXplID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gXCJlbGVtXCIpIHtcbiAgICAgIHZhciBlbGVtID0gY2hpbGQuZWxlbTtcbiAgICAgIHBzdHJ1dFNpemUgPSBNYXRoLm1heChwc3RydXRTaXplLCBlbGVtLm1heEZvbnRTaXplLCBlbGVtLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHN0cnV0U2l6ZSArPSAyO1xuICB2YXIgcHN0cnV0ID0gbWFrZVNwYW4kMihbXCJwc3RydXRcIl0sIFtdKTtcbiAgcHN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbShwc3RydXRTaXplKTsgLy8gQ3JlYXRlIGEgbmV3IGxpc3Qgb2YgYWN0dWFsIGNoaWxkcmVuIGF0IHRoZSBjb3JyZWN0IG9mZnNldHNcblxuICB2YXIgcmVhbENoaWxkcmVuID0gW107XG4gIHZhciBtaW5Qb3MgPSBkZXB0aDtcbiAgdmFyIG1heFBvcyA9IGRlcHRoO1xuICB2YXIgY3VyclBvcyA9IGRlcHRoO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNoaWxkcmVuLmxlbmd0aDsgX2kyKyspIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW5bX2kyXTtcblxuICAgIGlmIChfY2hpbGQudHlwZSA9PT0gXCJrZXJuXCIpIHtcbiAgICAgIGN1cnJQb3MgKz0gX2NoaWxkLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZWxlbSA9IF9jaGlsZC5lbGVtO1xuICAgICAgdmFyIGNsYXNzZXMgPSBfY2hpbGQud3JhcHBlckNsYXNzZXMgfHwgW107XG4gICAgICB2YXIgc3R5bGUgPSBfY2hpbGQud3JhcHBlclN0eWxlIHx8IHt9O1xuICAgICAgdmFyIGNoaWxkV3JhcCA9IG1ha2VTcGFuJDIoY2xhc3NlcywgW3BzdHJ1dCwgX2VsZW1dLCB1bmRlZmluZWQsIHN0eWxlKTtcbiAgICAgIGNoaWxkV3JhcC5zdHlsZS50b3AgPSBtYWtlRW0oLXBzdHJ1dFNpemUgLSBjdXJyUG9zIC0gX2VsZW0uZGVwdGgpO1xuXG4gICAgICBpZiAoX2NoaWxkLm1hcmdpbkxlZnQpIHtcbiAgICAgICAgY2hpbGRXcmFwLnN0eWxlLm1hcmdpbkxlZnQgPSBfY2hpbGQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaGlsZC5tYXJnaW5SaWdodCkge1xuICAgICAgICBjaGlsZFdyYXAuc3R5bGUubWFyZ2luUmlnaHQgPSBfY2hpbGQubWFyZ2luUmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHJlYWxDaGlsZHJlbi5wdXNoKGNoaWxkV3JhcCk7XG4gICAgICBjdXJyUG9zICs9IF9lbGVtLmhlaWdodCArIF9lbGVtLmRlcHRoO1xuICAgIH1cblxuICAgIG1pblBvcyA9IE1hdGgubWluKG1pblBvcywgY3VyclBvcyk7XG4gICAgbWF4UG9zID0gTWF0aC5tYXgobWF4UG9zLCBjdXJyUG9zKTtcbiAgfSAvLyBUaGUgdmxpc3QgY29udGVudHMgZ28gaW4gYSB0YWJsZS1jZWxsIHdpdGggYHZlcnRpY2FsLWFsaWduOmJvdHRvbWAuXG4gIC8vIFRoaXMgY2VsbCdzIGJvdHRvbSBlZGdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250YWluaW5nIHRhYmxlJ3MgYmFzZWxpbmVcbiAgLy8gd2l0aG91dCBvdmVybHkgZXhwYW5kaW5nIHRoZSBjb250YWluaW5nIGxpbmUtYm94LlxuXG5cbiAgdmFyIHZsaXN0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdFwiXSwgcmVhbENoaWxkcmVuKTtcbiAgdmxpc3Quc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKG1heFBvcyk7IC8vIEEgc2Vjb25kIHJvdyBpcyB1c2VkIGlmIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIHZsaXN0J3MgZGVwdGguXG5cbiAgdmFyIHJvd3M7XG5cbiAgaWYgKG1pblBvcyA8IDApIHtcbiAgICAvLyBXZSB3aWxsIGRlZmluZSBkZXB0aCBpbiBhbiBlbXB0eSBzcGFuIHdpdGggZGlzcGxheTogdGFibGUtY2VsbC5cbiAgICAvLyBJdCBzaG91bGQgcmVuZGVyIHdpdGggdGhlIGhlaWdodCB0aGF0IHdlIGRlZmluZS4gQnV0IENocm9tZSwgaW5cbiAgICAvLyBjb250ZW50ZWRpdGFibGUgbW9kZSBvbmx5LCB0cmVhdHMgdGhhdCBzcGFuIGFzIGlmIGl0IGNvbnRhaW5zIHNvbWVcbiAgICAvLyB0ZXh0IGNvbnRlbnQuIEFuZCB0aGF0IG1pbi1oZWlnaHQgb3Zlci1yaWRlcyBvdXIgZGVzaXJlZCBoZWlnaHQuXG4gICAgLy8gU28gd2UgcHV0IGFub3RoZXIgZW1wdHkgc3BhbiBpbnNpZGUgdGhlIGRlcHRoIHN0cnV0IHNwYW4uXG4gICAgdmFyIGVtcHR5U3BhbiA9IG1ha2VTcGFuJDIoW10sIFtdKTtcbiAgICB2YXIgZGVwdGhTdHJ1dCA9IG1ha2VTcGFuJDIoW1widmxpc3RcIl0sIFtlbXB0eVNwYW5dKTtcbiAgICBkZXB0aFN0cnV0LnN0eWxlLmhlaWdodCA9IG1ha2VFbSgtbWluUG9zKTsgLy8gU2FmYXJpIHdhbnRzIHRoZSBmaXJzdCByb3cgdG8gaGF2ZSBpbmxpbmUgY29udGVudDsgb3RoZXJ3aXNlIGl0XG4gICAgLy8gcHV0cyB0aGUgYm90dG9tIG9mIHRoZSAqc2Vjb25kKiByb3cgb24gdGhlIGJhc2VsaW5lLlxuXG4gICAgdmFyIHRvcFN0cnV0ID0gbWFrZVNwYW4kMihbXCJ2bGlzdC1zXCJdLCBbbmV3IFN5bWJvbE5vZGUoXCJcXHUyMDBiXCIpXSk7XG4gICAgcm93cyA9IFttYWtlU3BhbiQyKFtcInZsaXN0LXJcIl0sIFt2bGlzdCwgdG9wU3RydXRdKSwgbWFrZVNwYW4kMihbXCJ2bGlzdC1yXCJdLCBbZGVwdGhTdHJ1dF0pXTtcbiAgfSBlbHNlIHtcbiAgICByb3dzID0gW21ha2VTcGFuJDIoW1widmxpc3QtclwiXSwgW3ZsaXN0XSldO1xuICB9XG5cbiAgdmFyIHZ0YWJsZSA9IG1ha2VTcGFuJDIoW1widmxpc3QtdFwiXSwgcm93cyk7XG5cbiAgaWYgKHJvd3MubGVuZ3RoID09PSAyKSB7XG4gICAgdnRhYmxlLmNsYXNzZXMucHVzaChcInZsaXN0LXQyXCIpO1xuICB9XG5cbiAgdnRhYmxlLmhlaWdodCA9IG1heFBvcztcbiAgdnRhYmxlLmRlcHRoID0gLW1pblBvcztcbiAgcmV0dXJuIHZ0YWJsZTtcbn07IC8vIEdsdWUgaXMgYSBjb25jZXB0IGZyb20gVGVYIHdoaWNoIGlzIGEgZmxleGlibGUgc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBpblxuLy8gZWl0aGVyIGEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaXN0LiBJbiBLYVRlWCwgYXQgbGVhc3QgZm9yIG5vdywgaXQnc1xuLy8gc3RhdGljIHNwYWNlIGJldHdlZW4gZWxlbWVudHMgaW4gYSBob3Jpem9udGFsIGxheW91dC5cblxuXG52YXIgbWFrZUdsdWUgPSAobWVhc3VyZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgLy8gTWFrZSBhbiBlbXB0eSBzcGFuIGZvciB0aGUgc3BhY2VcbiAgdmFyIHJ1bGUgPSBtYWtlU3BhbiQyKFtcIm1zcGFjZVwiXSwgW10sIG9wdGlvbnMpO1xuICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZVNpemUobWVhc3VyZW1lbnQsIG9wdGlvbnMpO1xuICBydWxlLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNpemUpO1xuICByZXR1cm4gcnVsZTtcbn07IC8vIFRha2VzIGZvbnQgb3B0aW9ucywgYW5kIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZvbnRMb29rdXAgbmFtZVxuXG5cbnZhciByZXRyaWV2ZVRleHRGb250TmFtZSA9IGZ1bmN0aW9uIHJldHJpZXZlVGV4dEZvbnROYW1lKGZvbnRGYW1pbHksIGZvbnRXZWlnaHQsIGZvbnRTaGFwZSkge1xuICB2YXIgYmFzZUZvbnROYW1lID0gXCJcIjtcblxuICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHtcbiAgICBjYXNlIFwiYW1zcm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiQU1TXCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ0ZXh0cm1cIjpcbiAgICAgIGJhc2VGb250TmFtZSA9IFwiTWFpblwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHNmXCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlNhbnNTZXJpZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dHR0XCI6XG4gICAgICBiYXNlRm9udE5hbWUgPSBcIlR5cGV3cml0ZXJcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGJhc2VGb250TmFtZSA9IGZvbnRGYW1pbHk7XG4gICAgLy8gdXNlIGZvbnRzIGFkZGVkIGJ5IGEgcGx1Z2luXG4gIH1cblxuICB2YXIgZm9udFN0eWxlc05hbWU7XG5cbiAgaWYgKGZvbnRXZWlnaHQgPT09IFwidGV4dGJmXCIgJiYgZm9udFNoYXBlID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRJdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkJvbGRcIjtcbiAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID09PSBcInRleHRpdFwiKSB7XG4gICAgZm9udFN0eWxlc05hbWUgPSBcIkl0YWxpY1wiO1xuICB9IGVsc2Uge1xuICAgIGZvbnRTdHlsZXNOYW1lID0gXCJSZWd1bGFyXCI7XG4gIH1cblxuICByZXR1cm4gYmFzZUZvbnROYW1lICsgXCItXCIgKyBmb250U3R5bGVzTmFtZTtcbn07XG4vKipcbiAqIE1hcHMgVGVYIGZvbnQgY29tbWFuZHMgdG8gb2JqZWN0cyBjb250YWluaW5nOlxuICogLSB2YXJpYW50OiBzdHJpbmcgdXNlZCBmb3IgXCJtYXRodmFyaWFudFwiIGF0dHJpYnV0ZSBpbiBidWlsZE1hdGhNTC5qc1xuICogLSBmb250TmFtZTogdGhlIFwic3R5bGVcIiBwYXJhbWV0ZXIgdG8gZm9udE1ldHJpY3MuZ2V0Q2hhcmFjdGVyTWV0cmljc1xuICovXG4vLyBBIG1hcCBiZXR3ZWVuIHRleCBmb250IGNvbW1hbmRzIGFuIE1hdGhNTCBtYXRodmFyaWFudCBhdHRyaWJ1dGUgdmFsdWVzXG5cblxudmFyIGZvbnRNYXAgPSB7XG4gIC8vIHN0eWxlc1xuICBcIm1hdGhiZlwiOiB7XG4gICAgdmFyaWFudDogXCJib2xkXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1Cb2xkXCJcbiAgfSxcbiAgXCJtYXRocm1cIjoge1xuICAgIHZhcmlhbnQ6IFwibm9ybWFsXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1SZWd1bGFyXCJcbiAgfSxcbiAgXCJ0ZXh0aXRcIjoge1xuICAgIHZhcmlhbnQ6IFwiaXRhbGljXCIsXG4gICAgZm9udE5hbWU6IFwiTWFpbi1JdGFsaWNcIlxuICB9LFxuICBcIm1hdGhpdFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYWluLUl0YWxpY1wiXG4gIH0sXG4gIFwibWF0aG5vcm1hbFwiOiB7XG4gICAgdmFyaWFudDogXCJpdGFsaWNcIixcbiAgICBmb250TmFtZTogXCJNYXRoLUl0YWxpY1wiXG4gIH0sXG4gIC8vIFwiYm9sZHN5bWJvbFwiIGlzIG1pc3NpbmcgYmVjYXVzZSB0aGV5IHJlcXVpcmUgdGhlIHVzZSBvZiBtdWx0aXBsZSBmb250czpcbiAgLy8gTWF0aC1Cb2xkSXRhbGljIGFuZCBNYWluLUJvbGQuICBUaGlzIGlzIGhhbmRsZWQgYnkgYSBzcGVjaWFsIGNhc2UgaW5cbiAgLy8gbWFrZU9yZCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYm9sZHN5bWJvbC5cbiAgLy8gZmFtaWxpZXNcbiAgXCJtYXRoYmJcIjoge1xuICAgIHZhcmlhbnQ6IFwiZG91YmxlLXN0cnVja1wiLFxuICAgIGZvbnROYW1lOiBcIkFNUy1SZWd1bGFyXCJcbiAgfSxcbiAgXCJtYXRoY2FsXCI6IHtcbiAgICB2YXJpYW50OiBcInNjcmlwdFwiLFxuICAgIGZvbnROYW1lOiBcIkNhbGlncmFwaGljLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhmcmFrXCI6IHtcbiAgICB2YXJpYW50OiBcImZyYWt0dXJcIixcbiAgICBmb250TmFtZTogXCJGcmFrdHVyLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzY3JcIjoge1xuICAgIHZhcmlhbnQ6IFwic2NyaXB0XCIsXG4gICAgZm9udE5hbWU6IFwiU2NyaXB0LVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGhzZlwiOiB7XG4gICAgdmFyaWFudDogXCJzYW5zLXNlcmlmXCIsXG4gICAgZm9udE5hbWU6IFwiU2Fuc1NlcmlmLVJlZ3VsYXJcIlxuICB9LFxuICBcIm1hdGh0dFwiOiB7XG4gICAgdmFyaWFudDogXCJtb25vc3BhY2VcIixcbiAgICBmb250TmFtZTogXCJUeXBld3JpdGVyLVJlZ3VsYXJcIlxuICB9XG59O1xudmFyIHN2Z0RhdGEgPSB7XG4gIC8vICAgcGF0aCwgd2lkdGgsIGhlaWdodFxuICB2ZWM6IFtcInZlY1wiLCAwLjQ3MSwgMC43MTRdLFxuICAvLyB2YWx1ZXMgZnJvbSB0aGUgZm9udCBnbHlwaFxuICBvaWludFNpemUxOiBbXCJvaWludFNpemUxXCIsIDAuOTU3LCAwLjQ5OV0sXG4gIC8vIG92YWwgdG8gb3ZlcmxheSB0aGUgaW50ZWdyYW5kXG4gIG9paW50U2l6ZTI6IFtcIm9paW50U2l6ZTJcIiwgMS40NzIsIDAuNjU5XSxcbiAgb2lpaW50U2l6ZTE6IFtcIm9paWludFNpemUxXCIsIDEuMzA0LCAwLjQ5OV0sXG4gIG9paWludFNpemUyOiBbXCJvaWlpbnRTaXplMlwiLCAxLjk4LCAwLjY1OV1cbn07XG5cbnZhciBzdGF0aWNTdmcgPSBmdW5jdGlvbiBzdGF0aWNTdmcodmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICB2YXIgW3BhdGhOYW1lLCB3aWR0aCwgaGVpZ2h0XSA9IHN2Z0RhdGFbdmFsdWVdO1xuICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gIHZhciBzdmdOb2RlID0gbmV3IFN2Z05vZGUoW3BhdGhdLCB7XG4gICAgXCJ3aWR0aFwiOiBtYWtlRW0od2lkdGgpLFxuICAgIFwiaGVpZ2h0XCI6IG1ha2VFbShoZWlnaHQpLFxuICAgIC8vIE92ZXJyaWRlIENTUyBydWxlIGAua2F0ZXggc3ZnIHsgd2lkdGg6IDEwMCUgfWBcbiAgICBcInN0eWxlXCI6IFwid2lkdGg6XCIgKyBtYWtlRW0od2lkdGgpLFxuICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIDEwMDAgKiB3aWR0aCArIFwiIFwiICsgMTAwMCAqIGhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pblwiXG4gIH0pO1xuICB2YXIgc3BhbiA9IG1ha2VTdmdTcGFuKFtcIm92ZXJsYXlcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHNwYW47XG59O1xuXG52YXIgYnVpbGRDb21tb24gPSB7XG4gIGZvbnRNYXAsXG4gIG1ha2VTeW1ib2wsXG4gIG1hdGhzeW0sXG4gIG1ha2VTcGFuOiBtYWtlU3BhbiQyLFxuICBtYWtlU3ZnU3BhbixcbiAgbWFrZUxpbmVTcGFuLFxuICBtYWtlQW5jaG9yLFxuICBtYWtlRnJhZ21lbnQsXG4gIHdyYXBGcmFnbWVudCxcbiAgbWFrZVZMaXN0LFxuICBtYWtlT3JkLFxuICBtYWtlR2x1ZSxcbiAgc3RhdGljU3ZnLFxuICBzdmdEYXRhLFxuICB0cnlDb21iaW5lQ2hhcnNcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHNwYWNlcyBiZXR3ZWVuIGRpZmZlcmVudCBjbGFzc2VzIG9mIGF0b21zLlxuICovXG52YXIgdGhpbnNwYWNlID0ge1xuICBudW1iZXI6IDMsXG4gIHVuaXQ6IFwibXVcIlxufTtcbnZhciBtZWRpdW1zcGFjZSA9IHtcbiAgbnVtYmVyOiA0LFxuICB1bml0OiBcIm11XCJcbn07XG52YXIgdGhpY2tzcGFjZSA9IHtcbiAgbnVtYmVyOiA1LFxuICB1bml0OiBcIm11XCJcbn07IC8vIE1ha2luZyB0aGUgdHlwZSBiZWxvdyBleGFjdCB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHMgZG9lc24ndCB3b3JrIGR1ZSB0b1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNDU4MlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvNTY4OFxuLy8gSG93ZXZlciwgc2luY2UgKmFsbCogZmllbGRzIGFyZSBvcHRpb25hbCwgJFNoYXBlPD4gd29ya3MgYXMgc3VnZ2VzdGVkIGluIDU2ODhcbi8vIGFib3ZlLlxuXG4vLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIGRpc3BsYXkgYW5kIHRleHQgc3R5bGVzXG52YXIgc3BhY2luZ3MgPSB7XG4gIG1vcmQ6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1iaW46IHtcbiAgICBtb3JkOiBtZWRpdW1zcGFjZSxcbiAgICBtb3A6IG1lZGl1bXNwYWNlLFxuICAgIG1vcGVuOiBtZWRpdW1zcGFjZSxcbiAgICBtaW5uZXI6IG1lZGl1bXNwYWNlXG4gIH0sXG4gIG1yZWw6IHtcbiAgICBtb3JkOiB0aGlja3NwYWNlLFxuICAgIG1vcDogdGhpY2tzcGFjZSxcbiAgICBtb3BlbjogdGhpY2tzcGFjZSxcbiAgICBtaW5uZXI6IHRoaWNrc3BhY2VcbiAgfSxcbiAgbW9wZW46IHt9LFxuICBtY2xvc2U6IHtcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtYmluOiBtZWRpdW1zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1pbm5lcjogdGhpbnNwYWNlXG4gIH0sXG4gIG1wdW5jdDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZSxcbiAgICBtcmVsOiB0aGlja3NwYWNlLFxuICAgIG1vcGVuOiB0aGluc3BhY2UsXG4gICAgbWNsb3NlOiB0aGluc3BhY2UsXG4gICAgbXB1bmN0OiB0aGluc3BhY2UsXG4gICAgbWlubmVyOiB0aGluc3BhY2VcbiAgfSxcbiAgbWlubmVyOiB7XG4gICAgbW9yZDogdGhpbnNwYWNlLFxuICAgIG1vcDogdGhpbnNwYWNlLFxuICAgIG1iaW46IG1lZGl1bXNwYWNlLFxuICAgIG1yZWw6IHRoaWNrc3BhY2UsXG4gICAgbW9wZW46IHRoaW5zcGFjZSxcbiAgICBtcHVuY3Q6IHRoaW5zcGFjZSxcbiAgICBtaW5uZXI6IHRoaW5zcGFjZVxuICB9XG59OyAvLyBTcGFjaW5nIHJlbGF0aW9uc2hpcHMgZm9yIHNjcmlwdCBhbmQgc2NyaXB0c2NyaXB0IHN0eWxlc1xuXG52YXIgdGlnaHRTcGFjaW5ncyA9IHtcbiAgbW9yZDoge1xuICAgIG1vcDogdGhpbnNwYWNlXG4gIH0sXG4gIG1vcDoge1xuICAgIG1vcmQ6IHRoaW5zcGFjZSxcbiAgICBtb3A6IHRoaW5zcGFjZVxuICB9LFxuICBtYmluOiB7fSxcbiAgbXJlbDoge30sXG4gIG1vcGVuOiB7fSxcbiAgbWNsb3NlOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfSxcbiAgbXB1bmN0OiB7fSxcbiAgbWlubmVyOiB7XG4gICAgbW9wOiB0aGluc3BhY2VcbiAgfVxufTtcblxuLyoqIENvbnRleHQgcHJvdmlkZWQgdG8gZnVuY3Rpb24gaGFuZGxlcnMgZm9yIGVycm9yIG1lc3NhZ2VzLiAqL1xuLy8gTm90ZTogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHJldHVybiB0eXBlIHVuaW9uIHdpbGwgY2F1c2UgYSBmbG93IGVycm9yLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zNjYzLlxuLy8gTW9yZSBnZW5lcmFsIHZlcnNpb24gb2YgYEh0bWxCdWlsZGVyYCBmb3Igbm9kZXMgKGUuZy4gXFxzdW0sIGFjY2VudCB0eXBlcylcbi8vIHdob3NlIHByZXNlbmNlIGltcGFjdHMgc3VwZXIvc3Vic2NyaXB0aW5nLiBJbiB0aGlzIGNhc2UsIFBhcnNlTm9kZTxcInN1cHN1YlwiPlxuLy8gZGVsZWdhdGVzIGl0cyBIVE1MIGJ1aWxkaW5nIHRvIHRoZSBIdG1sQnVpbGRlciBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIG5vZGVzLlxuXG4vKipcbiAqIEZpbmFsIGZ1bmN0aW9uIHNwZWMgZm9yIHVzZSBhdCBwYXJzZSB0aW1lLlxuICogVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGBGdW5jdGlvblByb3BTcGVjYCwgZXhjZXB0IGl0XG4gKiAxLiBpbmNsdWRlcyB0aGUgZnVuY3Rpb24gaGFuZGxlciwgYW5kXG4gKiAyLiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGV4Y2VwdCBhcmdUeXBlcy5cbiAqIEl0IGlzIGdlbmVyYXRlZCBieSBgZGVmaW5lRnVuY3Rpb24oKWAgYmVsb3cuXG4gKi9cblxuLyoqXG4gKiBBbGwgcmVnaXN0ZXJlZCBmdW5jdGlvbnMuXG4gKiBgZnVuY3Rpb25zLmpzYCBqdXN0IGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeS5cbiAqL1xudmFyIF9mdW5jdGlvbnMgPSB7fTtcbi8qKlxuICogQWxsIEhUTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX2h0bWxHcm91cEJ1aWxkZXJzID0ge307XG4vKipcbiAqIEFsbCBNYXRoTUwgYnVpbGRlcnMuIFNob3VsZCBiZSBvbmx5IHVzZWQgaW4gdGhlIGBkZWZpbmUqYCBhbmQgdGhlIGBidWlsZCpNTGBcbiAqIGZ1bmN0aW9ucy5cbiAqL1xuXG52YXIgX21hdGhtbEdyb3VwQnVpbGRlcnMgPSB7fTtcbmZ1bmN0aW9uIGRlZmluZUZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHtcbiAgICB0eXBlLFxuICAgIG5hbWVzLFxuICAgIHByb3BzLFxuICAgIGhhbmRsZXIsXG4gICAgaHRtbEJ1aWxkZXIsXG4gICAgbWF0aG1sQnVpbGRlclxuICB9ID0gX3JlZjtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIG9mIGZ1bmN0aW9uc1xuICB2YXIgZGF0YSA9IHtcbiAgICB0eXBlLFxuICAgIG51bUFyZ3M6IHByb3BzLm51bUFyZ3MsXG4gICAgYXJnVHlwZXM6IHByb3BzLmFyZ1R5cGVzLFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiAhIXByb3BzLmFsbG93ZWRJbkFyZ3VtZW50LFxuICAgIGFsbG93ZWRJblRleHQ6ICEhcHJvcHMuYWxsb3dlZEluVGV4dCxcbiAgICBhbGxvd2VkSW5NYXRoOiBwcm9wcy5hbGxvd2VkSW5NYXRoID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMuYWxsb3dlZEluTWF0aCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IHByb3BzLm51bU9wdGlvbmFsQXJncyB8fCAwLFxuICAgIGluZml4OiAhIXByb3BzLmluZml4LFxuICAgIHByaW1pdGl2ZTogISFwcm9wcy5wcmltaXRpdmUsXG4gICAgaGFuZGxlcjogaGFuZGxlclxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICBfZnVuY3Rpb25zW25hbWVzW2ldXSA9IGRhdGE7XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIGlmIChodG1sQnVpbGRlcikge1xuICAgICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gICAgfVxuXG4gICAgaWYgKG1hdGhtbEJ1aWxkZXIpIHtcbiAgICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgdG8gcmVnaXN0ZXIgb25seSB0aGUgSFRNTCBhbmQgTWF0aE1MIGJ1aWxkZXJzIGZvciBhIGZ1bmN0aW9uIChlLmcuXG4gKiBpZiB0aGUgZnVuY3Rpb24ncyBQYXJzZU5vZGUgaXMgZ2VuZXJhdGVkIGluIFBhcnNlci5qcyByYXRoZXIgdGhhbiB2aWEgYVxuICogc3RhbmQtYWxvbmUgaGFuZGxlciBwcm92aWRlZCB0byBgZGVmaW5lRnVuY3Rpb25gKS5cbiAqL1xuXG5mdW5jdGlvbiBkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKF9yZWYyKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBodG1sQnVpbGRlcixcbiAgICBtYXRobWxCdWlsZGVyXG4gIH0gPSBfcmVmMjtcbiAgZGVmaW5lRnVuY3Rpb24oe1xuICAgIHR5cGUsXG4gICAgbmFtZXM6IFtdLFxuICAgIHByb3BzOiB7XG4gICAgICBudW1BcmdzOiAwXG4gICAgfSxcblxuICAgIGhhbmRsZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBuZXZlciBiZSBjYWxsZWQuJyk7XG4gICAgfSxcblxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSk7XG59XG52YXIgbm9ybWFsaXplQXJndW1lbnQgPSBmdW5jdGlvbiBub3JtYWxpemVBcmd1bWVudChhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIgJiYgYXJnLmJvZHkubGVuZ3RoID09PSAxID8gYXJnLmJvZHlbMF0gOiBhcmc7XG59OyAvLyBTaW5jZSB0aGUgY29ycmVzcG9uZGluZyBidWlsZEhUTUwvYnVpbGRNYXRoTUwgZnVuY3Rpb24gZXhwZWN0cyBhXG4vLyBsaXN0IG9mIGVsZW1lbnRzLCB3ZSBub3JtYWxpemUgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBhcmd1bWVudHNcblxudmFyIG9yZGFyZ3VtZW50ID0gZnVuY3Rpb24gb3JkYXJndW1lbnQoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gXCJvcmRncm91cFwiID8gYXJnLmJvZHkgOiBbYXJnXTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIGRvZXMgdGhlIG1haW4gd29yayBvZiBidWlsZGluZyBhIGRvbVRyZWUgc3RydWN0dXJlIGZyb20gYSBwYXJzZVxuICogdHJlZS4gVGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgYnVpbGRIVE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlLlxuICogVGhlbiwgdGhlIGJ1aWxkRXhwcmVzc2lvbiwgYnVpbGRHcm91cCwgYW5kIHZhcmlvdXMgZ3JvdXBCdWlsZGVycyBmdW5jdGlvbnNcbiAqIGFyZSBjYWxsZWQsIHRvIHByb2R1Y2UgYSBmaW5hbCBIVE1MIHRyZWUuXG4gKi9cbnZhciBtYWtlU3BhbiQxID0gYnVpbGRDb21tb24ubWFrZVNwYW47IC8vIEJpbmFyeSBhdG9tcyAoZmlyc3QgY2xhc3MgYG1iaW5gKSBjaGFuZ2UgaW50byBvcmRpbmFyeSBhdG9tcyAoYG1vcmRgKVxuLy8gZGVwZW5kaW5nIG9uIHRoZWlyIHN1cnJvdW5kaW5ncy4gU2VlIFRlWGJvb2sgcGcuIDQ0Mi00NDYsIFJ1bGVzIDUgYW5kIDYsXG4vLyBhbmQgdGhlIHRleHQgYmVmb3JlIFJ1bGUgMTkuXG5cbnZhciBiaW5MZWZ0Q2FuY2VsbGVyID0gW1wibGVmdG1vc3RcIiwgXCJtYmluXCIsIFwibW9wZW5cIiwgXCJtcmVsXCIsIFwibW9wXCIsIFwibXB1bmN0XCJdO1xudmFyIGJpblJpZ2h0Q2FuY2VsbGVyID0gW1wicmlnaHRtb3N0XCIsIFwibXJlbFwiLCBcIm1jbG9zZVwiLCBcIm1wdW5jdFwiXTtcbnZhciBzdHlsZU1hcCQxID0ge1xuICBcImRpc3BsYXlcIjogU3R5bGUkMS5ESVNQTEFZLFxuICBcInRleHRcIjogU3R5bGUkMS5URVhULFxuICBcInNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVCxcbiAgXCJzY3JpcHRzY3JpcHRcIjogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn07XG52YXIgRG9tRW51bSA9IHtcbiAgbW9yZDogXCJtb3JkXCIsXG4gIG1vcDogXCJtb3BcIixcbiAgbWJpbjogXCJtYmluXCIsXG4gIG1yZWw6IFwibXJlbFwiLFxuICBtb3BlbjogXCJtb3BlblwiLFxuICBtY2xvc2U6IFwibWNsb3NlXCIsXG4gIG1wdW5jdDogXCJtcHVuY3RcIixcbiAgbWlubmVyOiBcIm1pbm5lclwiXG59O1xuXG4vKipcbiAqIFRha2UgYSBsaXN0IG9mIG5vZGVzLCBidWlsZCB0aGVtIGluIG9yZGVyLCBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUgYnVpbHRcbiAqIG5vZGVzLiBkb2N1bWVudEZyYWdtZW50cyBhcmUgZmxhdHRlbmVkIGludG8gdGhlaXIgY29udGVudHMsIHNvIHRoZVxuICogcmV0dXJuZWQgbGlzdCBjb250YWlucyBubyBmcmFnbWVudHMuIGBpc1JlYWxHcm91cGAgaXMgdHJ1ZSBpZiBgZXhwcmVzc2lvbmBcbiAqIGlzIGEgcmVhbCBncm91cCAobm8gYXRvbXMgd2lsbCBiZSBhZGRlZCBvbiBlaXRoZXIgc2lkZSksIGFzIG9wcG9zZWQgdG9cbiAqIGEgcGFydGlhbCBncm91cCAoZS5nLiBvbmUgY3JlYXRlZCBieSBcXGNvbG9yKS4gYHN1cnJvdW5kaW5nYCBpcyBhbiBhcnJheVxuICogY29uc2lzdGluZyB0eXBlIG9mIG5vZGVzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGVmdCBhbmQgcmlnaHQuXG4gKi9cbnZhciBidWlsZEV4cHJlc3Npb24kMSA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc1JlYWxHcm91cCwgc3Vycm91bmRpbmcpIHtcbiAgaWYgKHN1cnJvdW5kaW5nID09PSB2b2lkIDApIHtcbiAgICBzdXJyb3VuZGluZyA9IFtudWxsLCBudWxsXTtcbiAgfVxuXG4gIC8vIFBhcnNlIGV4cHJlc3Npb25zIGludG8gYGdyb3Vwc2AuXG4gIHZhciBncm91cHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb3V0cHV0ID0gYnVpbGRHcm91cCQxKGV4cHJlc3Npb25baV0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IG91dHB1dC5jaGlsZHJlbjtcbiAgICAgIGdyb3Vwcy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzLnB1c2gob3V0cHV0KTtcbiAgICB9XG4gIH0gLy8gQ29tYmluZSBjb25zZWN1dGl2ZSBkb21UcmVlLnN5bWJvbE5vZGVzIGludG8gYSBzaW5nbGUgc3ltYm9sTm9kZS5cblxuXG4gIGJ1aWxkQ29tbW9uLnRyeUNvbWJpbmVDaGFycyhncm91cHMpOyAvLyBJZiBgZXhwcmVzc2lvbmAgaXMgYSBwYXJ0aWFsIGdyb3VwLCBsZXQgdGhlIHBhcmVudCBoYW5kbGUgc3BhY2luZ3NcbiAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyBncm91cHMgbXVsdGlwbGUgdGltZXMuXG5cbiAgaWYgKCFpc1JlYWxHcm91cCkge1xuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICB2YXIgZ2x1ZU9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBub2RlID0gZXhwcmVzc2lvblswXTtcblxuICAgIGlmIChub2RlLnR5cGUgPT09IFwic2l6aW5nXCIpIHtcbiAgICAgIGdsdWVPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKG5vZGUuc2l6ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IFwic3R5bGluZ1wiKSB7XG4gICAgICBnbHVlT3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGVNYXAkMVtub2RlLnN0eWxlXSk7XG4gICAgfVxuICB9IC8vIER1bW15IHNwYW5zIGZvciBkZXRlcm1pbmluZyBzcGFjaW5ncyBiZXR3ZWVuIHN1cnJvdW5kaW5nIGF0b21zLlxuICAvLyBJZiBgZXhwcmVzc2lvbmAgaGFzIG5vIGF0b21zIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LCBjbGFzcyBcImxlZnRtb3N0XCJcbiAgLy8gb3IgXCJyaWdodG1vc3RcIiwgcmVzcGVjdGl2ZWx5LCBpcyB1c2VkIHRvIGluZGljYXRlIGl0LlxuXG5cbiAgdmFyIGR1bW15UHJldiA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzBdIHx8IFwibGVmdG1vc3RcIl0sIFtdLCBvcHRpb25zKTtcbiAgdmFyIGR1bW15TmV4dCA9IG1ha2VTcGFuJDEoW3N1cnJvdW5kaW5nWzFdIHx8IFwicmlnaHRtb3N0XCJdLCBbXSwgb3B0aW9ucyk7IC8vIFRPRE86IFRoZXNlIGNvZGUgYXNzdW1lcyB0aGF0IGEgbm9kZSdzIG1hdGggY2xhc3MgaXMgdGhlIGZpcnN0IGVsZW1lbnRcbiAgLy8gb2YgaXRzIGBjbGFzc2VzYCBhcnJheS4gQSBsYXRlciBjbGVhbnVwIHNob3VsZCBlbnN1cmUgdGhpcywgZm9yXG4gIC8vIGluc3RhbmNlIGJ5IGNoYW5naW5nIHRoZSBzaWduYXR1cmUgb2YgYG1ha2VTcGFuYC5cbiAgLy8gQmVmb3JlIGRldGVybWluaW5nIHdoYXQgc3BhY2VzIHRvIGluc2VydCwgcGVyZm9ybSBiaW4gY2FuY2VsbGF0aW9uLlxuICAvLyBCaW5hcnkgb3BlcmF0b3JzIGNoYW5nZSB0byBvcmRpbmFyeSBzeW1ib2xzIGluIHNvbWUgY29udGV4dHMuXG5cbiAgdmFyIGlzUm9vdCA9IGlzUmVhbEdyb3VwID09PSBcInJvb3RcIjtcbiAgdHJhdmVyc2VOb25TcGFjZU5vZGVzKGdyb3VwcywgKG5vZGUsIHByZXYpID0+IHtcbiAgICB2YXIgcHJldlR5cGUgPSBwcmV2LmNsYXNzZXNbMF07XG4gICAgdmFyIHR5cGUgPSBub2RlLmNsYXNzZXNbMF07XG5cbiAgICBpZiAocHJldlR5cGUgPT09IFwibWJpblwiICYmIHV0aWxzLmNvbnRhaW5zKGJpblJpZ2h0Q2FuY2VsbGVyLCB0eXBlKSkge1xuICAgICAgcHJldi5jbGFzc2VzWzBdID0gXCJtb3JkXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1iaW5cIiAmJiB1dGlscy5jb250YWlucyhiaW5MZWZ0Q2FuY2VsbGVyLCBwcmV2VHlwZSkpIHtcbiAgICAgIG5vZGUuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIH1cbiAgfSwge1xuICAgIG5vZGU6IGR1bW15UHJldlxuICB9LCBkdW1teU5leHQsIGlzUm9vdCk7XG4gIHRyYXZlcnNlTm9uU3BhY2VOb2Rlcyhncm91cHMsIChub2RlLCBwcmV2KSA9PiB7XG4gICAgdmFyIHByZXZUeXBlID0gZ2V0VHlwZU9mRG9tVHJlZShwcmV2KTtcbiAgICB2YXIgdHlwZSA9IGdldFR5cGVPZkRvbVRyZWUobm9kZSk7IC8vICdtdGlnaHQnIGluZGljYXRlcyB0aGF0IHRoZSBub2RlIGlzIHNjcmlwdCBvciBzY3JpcHRzY3JpcHQgc3R5bGUuXG5cbiAgICB2YXIgc3BhY2UgPSBwcmV2VHlwZSAmJiB0eXBlID8gbm9kZS5oYXNDbGFzcyhcIm10aWdodFwiKSA/IHRpZ2h0U3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogc3BhY2luZ3NbcHJldlR5cGVdW3R5cGVdIDogbnVsbDtcblxuICAgIGlmIChzcGFjZSkge1xuICAgICAgLy8gSW5zZXJ0IGdsdWUgKHNwYWNpbmcpIGFmdGVyIHRoZSBgcHJldmAuXG4gICAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUdsdWUoc3BhY2UsIGdsdWVPcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBub2RlOiBkdW1teVByZXZcbiAgfSwgZHVtbXlOZXh0LCBpc1Jvb3QpO1xuICByZXR1cm4gZ3JvdXBzO1xufTsgLy8gRGVwdGgtZmlyc3QgdHJhdmVyc2Ugbm9uLXNwYWNlIGBub2Rlc2AsIGNhbGxpbmcgYGNhbGxiYWNrYCB3aXRoIHRoZSBjdXJyZW50IGFuZFxuLy8gcHJldmlvdXMgbm9kZSBhcyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIGEgbm9kZSB0byBpbnNlcnQgYWZ0ZXIgdGhlXG4vLyBwcmV2aW91cyBub2RlLiBgcHJldmAgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHByZXZpb3VzIG5vZGUgYW5kIGBpbnNlcnRBZnRlcmBcbi8vIGZ1bmN0aW9uIHRvIGluc2VydCBhZnRlciBpdC4gYG5leHRgIGlzIGEgbm9kZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJpZ2h0LlxuLy8gVXNlZCBmb3IgYmluIGNhbmNlbGxhdGlvbiBhbmQgaW5zZXJ0aW5nIHNwYWNpbmdzLlxuXG52YXIgdHJhdmVyc2VOb25TcGFjZU5vZGVzID0gZnVuY3Rpb24gdHJhdmVyc2VOb25TcGFjZU5vZGVzKG5vZGVzLCBjYWxsYmFjaywgcHJldiwgbmV4dCwgaXNSb290KSB7XG4gIGlmIChuZXh0KSB7XG4gICAgLy8gdGVtcG9yYXJpbHkgYXBwZW5kIHRoZSByaWdodCBub2RlLCBpZiBleGlzdHNcbiAgICBub2Rlcy5wdXNoKG5leHQpO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgIHZhciBwYXJ0aWFsR3JvdXAgPSBjaGVja1BhcnRpYWxHcm91cChub2RlKTtcblxuICAgIGlmIChwYXJ0aWFsR3JvdXApIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBERlNcbiAgICAgIC8vICRGbG93Rml4TWU6IG1ha2Ugbm9kZXMgYSAkUmVhZE9ubHlBcnJheSBieSByZXR1cm5pbmcgYSBuZXcgYXJyYXlcbiAgICAgIHRyYXZlcnNlTm9uU3BhY2VOb2RlcyhwYXJ0aWFsR3JvdXAuY2hpbGRyZW4sIGNhbGxiYWNrLCBwcmV2LCBudWxsLCBpc1Jvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBJZ25vcmUgZXhwbGljaXQgc3BhY2VzIChlLmcuLCBcXDssIFxcLCkgd2hlbiBkZXRlcm1pbmluZyB3aGF0IGltcGxpY2l0XG4gICAgLy8gc3BhY2luZyBzaG91bGQgZ28gYmV0d2VlbiBhdG9tcyBvZiBkaWZmZXJlbnQgY2xhc3Nlc1xuXG5cbiAgICB2YXIgbm9uc3BhY2UgPSAhbm9kZS5oYXNDbGFzcyhcIm1zcGFjZVwiKTtcblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKG5vZGUsIHByZXYubm9kZSk7XG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHByZXYuaW5zZXJ0QWZ0ZXIpIHtcbiAgICAgICAgICBwcmV2Lmluc2VydEFmdGVyKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGF0IGZyb250XG4gICAgICAgICAgbm9kZXMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub25zcGFjZSkge1xuICAgICAgcHJldi5ub2RlID0gbm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzUm9vdCAmJiBub2RlLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgcHJldi5ub2RlID0gbWFrZVNwYW4kMShbXCJsZWZ0bW9zdFwiXSk7IC8vIHRyZWF0IGxpa2UgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICB9XG5cbiAgICBwcmV2Lmluc2VydEFmdGVyID0gKGluZGV4ID0+IG4gPT4ge1xuICAgICAgbm9kZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbik7XG4gICAgICBpKys7XG4gICAgfSkoaSk7XG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5vZGVzLnBvcCgpO1xuICB9XG59OyAvLyBDaGVjayBpZiBnaXZlbiBub2RlIGlzIGEgcGFydGlhbCBncm91cCwgaS5lLiwgZG9lcyBub3QgYWZmZWN0IHNwYWNpbmcgYXJvdW5kLlxuXG5cbnZhciBjaGVja1BhcnRpYWxHcm91cCA9IGZ1bmN0aW9uIGNoZWNrUGFydGlhbEdyb3VwKG5vZGUpIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBBbmNob3IgfHwgbm9kZSBpbnN0YW5jZW9mIFNwYW4gJiYgbm9kZS5oYXNDbGFzcyhcImVuY2xvc2luZ1wiKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBSZXR1cm4gdGhlIG91dGVybW9zdCBub2RlIG9mIGEgZG9tVHJlZS5cblxuXG52YXIgZ2V0T3V0ZXJtb3N0Tm9kZSA9IGZ1bmN0aW9uIGdldE91dGVybW9zdE5vZGUobm9kZSwgc2lkZSkge1xuICB2YXIgcGFydGlhbEdyb3VwID0gY2hlY2tQYXJ0aWFsR3JvdXAobm9kZSk7XG5cbiAgaWYgKHBhcnRpYWxHcm91cCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHBhcnRpYWxHcm91cC5jaGlsZHJlbjtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmIChzaWRlID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dGVybW9zdE5vZGUoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHJldHVybiBnZXRPdXRlcm1vc3ROb2RlKGNoaWxkcmVuWzBdLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59OyAvLyBSZXR1cm4gbWF0aCBhdG9tIGNsYXNzIChtY2xhc3MpIG9mIGEgZG9tVHJlZS5cbi8vIElmIGBzaWRlYCBpcyBnaXZlbiwgaXQgd2lsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIG91dGVybW9zdCBub2RlIGF0IGdpdmVuIHNpZGUuXG5cblxudmFyIGdldFR5cGVPZkRvbVRyZWUgPSBmdW5jdGlvbiBnZXRUeXBlT2ZEb21UcmVlKG5vZGUsIHNpZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc2lkZSkge1xuICAgIG5vZGUgPSBnZXRPdXRlcm1vc3ROb2RlKG5vZGUsIHNpZGUpO1xuICB9IC8vIFRoaXMgbWFrZXMgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgYXMgdG8gd2hlcmUgdGhlIHR5cGUgb2YgYXRvbVxuICAvLyBhcHBlYXJzLiAgV2Ugc2hvdWxkIGRvIGEgYmV0dGVyIGpvYiBvZiBlbmZvcmNpbmcgdGhpcy5cblxuXG4gIHJldHVybiBEb21FbnVtW25vZGUuY2xhc3Nlc1swXV0gfHwgbnVsbDtcbn07XG52YXIgbWFrZU51bGxEZWxpbWl0ZXIgPSBmdW5jdGlvbiBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBtb3JlQ2xhc3NlcyA9IFtcIm51bGxkZWxpbWl0ZXJcIl0uY29uY2F0KG9wdGlvbnMuYmFzZVNpemluZ0NsYXNzZXMoKSk7XG4gIHJldHVybiBtYWtlU3BhbiQxKGNsYXNzZXMuY29uY2F0KG1vcmVDbGFzc2VzKSk7XG59O1xuLyoqXG4gKiBidWlsZEdyb3VwIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgZ3JvdXAgYW5kIGNhbGxzIHRoZSBjb3JyZWN0IGdyb3VwVHlwZVxuICogZnVuY3Rpb24gZm9yIGl0LiBJdCBhbHNvIGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIG9mIHNpemUgYW5kIHN0eWxlIGNoYW5nZXNcbiAqIGJldHdlZW4gcGFyZW50cyBhbmQgY2hpbGRyZW4uXG4gKi9cblxudmFyIGJ1aWxkR3JvdXAkMSA9IGZ1bmN0aW9uIGJ1aWxkR3JvdXAoZ3JvdXAsIG9wdGlvbnMsIGJhc2VPcHRpb25zKSB7XG4gIGlmICghZ3JvdXApIHtcbiAgICByZXR1cm4gbWFrZVNwYW4kMSgpO1xuICB9XG5cbiAgaWYgKF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIGdyb3VwTm9kZSA9IF9odG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXShncm91cCwgb3B0aW9ucyk7IC8vIElmIHRoZSBzaXplIGNoYW5nZWQgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBncm91cCwgYWNjb3VudFxuICAgIC8vIGZvciB0aGF0IHNpemUgZGlmZmVyZW5jZS5cblxuICAgIGlmIChiYXNlT3B0aW9ucyAmJiBvcHRpb25zLnNpemUgIT09IGJhc2VPcHRpb25zLnNpemUpIHtcbiAgICAgIGdyb3VwTm9kZSA9IG1ha2VTcGFuJDEob3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSwgW2dyb3VwTm9kZV0sIG9wdGlvbnMpO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gYmFzZU9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgICBncm91cE5vZGUuZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBOb2RlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJ1wiICsgZ3JvdXAudHlwZSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogQ29tYmluZSBhbiBhcnJheSBvZiBIVE1MIERPTSBub2RlcyAoZS5nLiwgdGhlIG91dHB1dCBvZiBgYnVpbGRFeHByZXNzaW9uYClcbiAqIGludG8gYW4gdW5icmVha2FibGUgSFRNTCBub2RlIG9mIGNsYXNzIC5iYXNlLCB3aXRoIHByb3BlciBzdHJ1dHMgdG9cbiAqIGd1YXJhbnRlZSBjb3JyZWN0IHZlcnRpY2FsIGV4dGVudC4gIGBidWlsZEhUTUxgIGNhbGxzIHRoaXMgcmVwZWF0ZWRseSB0b1xuICogbWFrZSB1cCB0aGUgZW50aXJlIGV4cHJlc3Npb24gYXMgYSBzZXF1ZW5jZSBvZiB1bmJyZWFrYWJsZSB1bml0cy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZEhUTUxVbmJyZWFrYWJsZShjaGlsZHJlbiwgb3B0aW9ucykge1xuICAvLyBDb21wdXRlIGhlaWdodCBhbmQgZGVwdGggb2YgdGhpcyBjaHVuay5cbiAgdmFyIGJvZHkgPSBtYWtlU3BhbiQxKFtcImJhc2VcIl0sIGNoaWxkcmVuLCBvcHRpb25zKTsgLy8gQWRkIHN0cnV0LCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHRvcCBvZiB0aGUgSFRNTCBlbGVtZW50IGZhbGxzIGF0XG4gIC8vIHRoZSBoZWlnaHQgb2YgdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgYm90dG9tIG9mIHRoZSBIVE1MIGVsZW1lbnRcbiAgLy8gZmFsbHMgYXQgdGhlIGRlcHRoIG9mIHRoZSBleHByZXNzaW9uLlxuXG4gIHZhciBzdHJ1dCA9IG1ha2VTcGFuJDEoW1wic3RydXRcIl0pO1xuICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoKTtcblxuICBpZiAoYm9keS5kZXB0aCkge1xuICAgIHN0cnV0LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSBtYWtlRW0oLWJvZHkuZGVwdGgpO1xuICB9XG5cbiAgYm9keS5jaGlsZHJlbi51bnNoaWZ0KHN0cnV0KTtcbiAgcmV0dXJuIGJvZHk7XG59XG4vKipcbiAqIFRha2UgYW4gZW50aXJlIHBhcnNlIHRyZWUsIGFuZCBidWlsZCBpdCBpbnRvIGFuIGFwcHJvcHJpYXRlIHNldCBvZiBIVE1MXG4gKiBub2Rlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTCh0cmVlLCBvcHRpb25zKSB7XG4gIC8vIFN0cmlwIG9mZiBvdXRlciB0YWcgd3JhcHBlciBmb3IgcHJvY2Vzc2luZyBiZWxvdy5cbiAgdmFyIHRhZyA9IG51bGw7XG5cbiAgaWYgKHRyZWUubGVuZ3RoID09PSAxICYmIHRyZWVbMF0udHlwZSA9PT0gXCJ0YWdcIikge1xuICAgIHRhZyA9IHRyZWVbMF0udGFnO1xuICAgIHRyZWUgPSB0cmVlWzBdLmJvZHk7XG4gIH0gLy8gQnVpbGQgdGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGluIHRoZSB0cmVlXG5cblxuICB2YXIgZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbiQxKHRyZWUsIG9wdGlvbnMsIFwicm9vdFwiKTtcbiAgdmFyIGVxbk51bTtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDIgJiYgZXhwcmVzc2lvblsxXS5oYXNDbGFzcyhcInRhZ1wiKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggYXV0b21hdGljIGVxdWF0aW9uIG51bWJlcnMsIGUuZy4ge2dhdGhlcn0uXG4gICAgZXFuTnVtID0gZXhwcmVzc2lvbi5wb3AoKTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IFtdOyAvLyBDcmVhdGUgb25lIGJhc2Ugbm9kZSBmb3IgZWFjaCBjaHVuayBiZXR3ZWVuIHBvdGVudGlhbCBsaW5lIGJyZWFrcy5cbiAgLy8gVGhlIFRlWEJvb2sgW3AuMTczXSBzYXlzIFwiQSBmb3JtdWxhIHdpbGwgYmUgYnJva2VuIG9ubHkgYWZ0ZXIgYVxuICAvLyByZWxhdGlvbiBzeW1ib2wgbGlrZSAkPSQgb3IgJDwkIG9yICRcXHJpZ2h0YXJyb3ckLCBvciBhZnRlciBhIGJpbmFyeVxuICAvLyBvcGVyYXRpb24gc3ltYm9sIGxpa2UgJCskIG9yICQtJCBvciAkXFx0aW1lcyQsIHdoZXJlIHRoZSByZWxhdGlvbiBvclxuICAvLyBiaW5hcnkgb3BlcmF0aW9uIGlzIG9uIHRoZSBgYG91dGVyIGxldmVsJycgb2YgdGhlIGZvcm11bGEgKGkuZS4sIG5vdFxuICAvLyBlbmNsb3NlZCBpbiB7Li4ufSBhbmQgbm90IHBhcnQgb2YgYW4gXFxvdmVyIGNvbnN0cnVjdGlvbikuXCJcblxuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgaWYgKGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtYmluXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJtcmVsXCIpIHx8IGV4cHJlc3Npb25baV0uaGFzQ2xhc3MoXCJhbGxvd2JyZWFrXCIpKSB7XG4gICAgICAvLyBQdXQgYW55IHBvc3Qtb3BlcmF0b3IgZ2x1ZSBvbiBzYW1lIGxpbmUgYXMgb3BlcmF0b3IuXG4gICAgICAvLyBXYXRjaCBmb3IgXFxub2JyZWFrIGFsb25nIHRoZSB3YXksIGFuZCBzdG9wIGF0IFxcbmV3bGluZS5cbiAgICAgIHZhciBub2JyZWFrID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxICYmIGV4cHJlc3Npb25baSArIDFdLmhhc0NsYXNzKFwibXNwYWNlXCIpICYmICFleHByZXNzaW9uW2kgKyAxXS5oYXNDbGFzcyhcIm5ld2xpbmVcIikpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBwYXJ0cy5wdXNoKGV4cHJlc3Npb25baV0pO1xuXG4gICAgICAgIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibm9icmVha1wiKSkge1xuICAgICAgICAgIG5vYnJlYWsgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IC8vIERvbid0IGFsbG93IGJyZWFrIGlmIFxcbm9icmVhayBhbW9uZyB0aGUgcG9zdC1vcGVyYXRvciBnbHVlLlxuXG5cbiAgICAgIGlmICghbm9icmVhaykge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gICAgICAgIHBhcnRzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uW2ldLmhhc0NsYXNzKFwibmV3bGluZVwiKSkge1xuICAgICAgLy8gV3JpdGUgdGhlIGxpbmUgZXhjZXB0IHRoZSBuZXdsaW5lXG4gICAgICBwYXJ0cy5wb3AoKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEhUTUxVbmJyZWFrYWJsZShwYXJ0cywgb3B0aW9ucykpO1xuICAgICAgICBwYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBQdXQgdGhlIG5ld2xpbmUgYXQgdGhlIHRvcCBsZXZlbFxuXG5cbiAgICAgIGNoaWxkcmVuLnB1c2goZXhwcmVzc2lvbltpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkSFRNTFVuYnJlYWthYmxlKHBhcnRzLCBvcHRpb25zKSk7XG4gIH0gLy8gTm93LCBpZiB0aGVyZSB3YXMgYSB0YWcsIGJ1aWxkIGl0IHRvbyBhbmQgYXBwZW5kIGl0IGFzIGEgZmluYWwgY2hpbGQuXG5cblxuICB2YXIgdGFnQ2hpbGQ7XG5cbiAgaWYgKHRhZykge1xuICAgIHRhZ0NoaWxkID0gYnVpbGRIVE1MVW5icmVha2FibGUoYnVpbGRFeHByZXNzaW9uJDEodGFnLCBvcHRpb25zLCB0cnVlKSk7XG4gICAgdGFnQ2hpbGQuY2xhc3NlcyA9IFtcInRhZ1wiXTtcbiAgICBjaGlsZHJlbi5wdXNoKHRhZ0NoaWxkKTtcbiAgfSBlbHNlIGlmIChlcW5OdW0pIHtcbiAgICBjaGlsZHJlbi5wdXNoKGVxbk51bSk7XG4gIH1cblxuICB2YXIgaHRtbE5vZGUgPSBtYWtlU3BhbiQxKFtcImthdGV4LWh0bWxcIl0sIGNoaWxkcmVuKTtcbiAgaHRtbE5vZGUuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpOyAvLyBBZGp1c3QgdGhlIHN0cnV0IG9mIHRoZSB0YWcgdG8gYmUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFsbCBjaGlsZHJlblxuICAvLyAodGhlIGhlaWdodCBvZiB0aGUgZW5jbG9zaW5nIGh0bWxOb2RlKSBmb3IgcHJvcGVyIHZlcnRpY2FsIGFsaWdubWVudC5cblxuICBpZiAodGFnQ2hpbGQpIHtcbiAgICB2YXIgc3RydXQgPSB0YWdDaGlsZC5jaGlsZHJlblswXTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oaHRtbE5vZGUuaGVpZ2h0ICsgaHRtbE5vZGUuZGVwdGgpO1xuXG4gICAgaWYgKGh0bWxOb2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1odG1sTm9kZS5kZXB0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWxOb2RlO1xufVxuXG4vKipcbiAqIFRoZXNlIG9iamVjdHMgc3RvcmUgZGF0YSBhYm91dCBNYXRoTUwgbm9kZXMuIFRoaXMgaXMgdGhlIE1hdGhNTCBlcXVpdmFsZW50XG4gKiBvZiB0aGUgdHlwZXMgaW4gZG9tVHJlZS5qcy4gU2luY2UgTWF0aE1MIGhhbmRsZXMgaXRzIG93biByZW5kZXJpbmcsIGFuZFxuICogc2luY2Ugd2UncmUgbWFpbmx5IHVzaW5nIE1hdGhNTCB0byBpbXByb3ZlIGFjY2Vzc2liaWxpdHksIHdlIGRvbid0IG1hbmFnZVxuICogYW55IG9mIHRoZSBzdHlsaW5nIHN0YXRlIHRoYXQgdGhlIHBsYWluIERPTSBub2RlcyBkby5cbiAqXG4gKiBUaGUgYHRvTm9kZWAgYW5kIGB0b01hcmt1cGAgZnVuY3Rpb25zIHdvcmsgc2ltaWxhcmx5IHRvIGhvdyB0aGV5IGRvIGluXG4gKiBkb21UcmVlLmpzLCBjcmVhdGluZyBuYW1lc3BhY2VkIERPTSBub2RlcyBhbmQgSFRNTCB0ZXh0IG1hcmt1cCByZXNwZWN0aXZlbHkuXG4gKi9cbmZ1bmN0aW9uIG5ld0RvY3VtZW50RnJhZ21lbnQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50KGNoaWxkcmVuKTtcbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBnZW5lcmFsIHB1cnBvc2UgTWF0aE1MIG5vZGUgb2YgYW55IHR5cGUuIFRoZVxuICogY29uc3RydWN0b3IgcmVxdWlyZXMgdGhlIHR5cGUgb2Ygbm9kZSB0byBjcmVhdGUgKGZvciBleGFtcGxlLCBgXCJtb1wiYCBvclxuICogYFwibXNwYWNlXCJgLCBjb3JyZXNwb25kaW5nIHRvIGA8bW8+YCBhbmQgYDxtc3BhY2U+YCB0YWdzKS5cbiAqL1xuXG5jbGFzcyBNYXRoTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNoaWxkcmVuLCBjbGFzc2VzKSB7XG4gICAgdGhpcy50eXBlID0gdm9pZCAwO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNoaWxkcmVuID0gdm9pZCAwO1xuICAgIHRoaXMuY2xhc3NlcyA9IHZvaWQgMDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLiBNYXRoTUwgZGVwZW5kcyBvbiBhdHRyaWJ1dGVzIHRvIGNvbnZleSBhXG4gICAqIHNlbWFudGljIGNvbnRlbnQsIHNvIHRoaXMgaXMgdXNlZCBoZWF2aWx5LlxuICAgKi9cblxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFuIGF0dHJpYnV0ZSBvbiBhIE1hdGhNTCBub2RlLlxuICAgKi9cblxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLCB0aGlzLnR5cGUpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB0aGlzLmF0dHJpYnV0ZXNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSBjcmVhdGVDbGFzcyh0aGlzLmNsYXNzZXMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2ldLnRvTm9kZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGFuIEhUTUwgbWFya3VwIHN0cmluZy5cbiAgICovXG5cblxuICB0b01hcmt1cCgpIHtcbiAgICB2YXIgbWFya3VwID0gXCI8XCIgKyB0aGlzLnR5cGU7IC8vIEFkZCB0aGUgYXR0cmlidXRlc1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLCBhdHRyKSkge1xuICAgICAgICBtYXJrdXAgKz0gXCIgXCIgKyBhdHRyICsgXCI9XFxcIlwiO1xuICAgICAgICBtYXJrdXAgKz0gdXRpbHMuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICAgIG1hcmt1cCArPSBcIlxcXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcmt1cCArPSBcIiBjbGFzcyA9XFxcIlwiICsgdXRpbHMuZXNjYXBlKGNyZWF0ZUNsYXNzKHRoaXMuY2xhc3NlcykpICsgXCJcXFwiXCI7XG4gICAgfVxuXG4gICAgbWFya3VwICs9IFwiPlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXJrdXAgKz0gdGhpcy5jaGlsZHJlbltpXS50b01hcmt1cCgpO1xuICAgIH1cblxuICAgIG1hcmt1cCArPSBcIjwvXCIgKyB0aGlzLnR5cGUgKyBcIj5cIjtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYSBzdHJpbmcsIHNpbWlsYXIgdG8gaW5uZXJUZXh0LCBidXQgZXNjYXBlZC5cbiAgICovXG5cblxuICB0b1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnRvVGV4dCgpKS5qb2luKFwiXCIpO1xuICB9XG5cbn1cbi8qKlxuICogVGhpcyBub2RlIHJlcHJlc2VudHMgYSBwaWVjZSBvZiB0ZXh0LlxuICovXG5cbmNsYXNzIFRleHROb2RlIHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IHZvaWQgMDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgdGV4dCBub2RlIGludG8gYSBET00gdGV4dCBub2RlLlxuICAgKi9cblxuXG4gIHRvTm9kZSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHQgbm9kZSBpbnRvIGVzY2FwZWQgSFRNTCBtYXJrdXBcbiAgICogKHJlcHJlc2VudGluZyB0aGUgdGV4dCBpdHNlbGYpLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIHJldHVybiB1dGlscy5lc2NhcGUodGhpcy50b1RleHQoKSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSB0ZXh0IG5vZGUgaW50byBhIHN0cmluZ1xuICAgKiAocmVwcmVzZW50aW5nIHRoZSB0ZXh0IGl0c2VsZikuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnRleHQ7XG4gIH1cblxufVxuLyoqXG4gKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIHNwYWNlLCBidXQgbWF5IHJlbmRlciBhcyA8bXNwYWNlLi4uLz4gb3IgYXMgdGV4dCxcbiAqIGRlcGVuZGluZyBvbiB0aGUgd2lkdGguXG4gKi9cblxuY2xhc3MgU3BhY2VOb2RlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYWNlIG5vZGUgd2l0aCB3aWR0aCBnaXZlbiBpbiBDU1MgZW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod2lkdGgpIHtcbiAgICB0aGlzLndpZHRoID0gdm9pZCAwO1xuICAgIHRoaXMuY2hhcmFjdGVyID0gdm9pZCAwO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDsgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELU1hdGhNTDItMjAwMDAzMjgvY2hhcHRlcjYuaHRtbFxuICAgIC8vIGZvciBhIHRhYmxlIG9mIHNwYWNlLWxpa2UgY2hhcmFjdGVycy4gIFdlIHVzZSBVbmljb2RlXG4gICAgLy8gcmVwcmVzZW50YXRpb25zIGluc3RlYWQgb2YgJkxvbmdOYW1lczsgYXMgaXQncyBub3QgY2xlYXIgaG93IHRvXG4gICAgLy8gbWFrZSB0aGUgbGF0dGVyIHZpYSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZS5cblxuICAgIGlmICh3aWR0aCA+PSAwLjA1NTU1ICYmIHdpZHRoIDw9IDAuMDU1NTYpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDBhXCI7IC8vICZWZXJ5VGhpblNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gMC4xNjY2ICYmIHdpZHRoIDw9IDAuMTY2Nykge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcIjsgLy8gJlRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjIyMiAmJiB3aWR0aCA8PSAwLjIyMjMpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XCI7IC8vICZNZWRpdW1TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IDAuMjc3NyAmJiB3aWR0aCA8PSAwLjI3NzgpIHtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gXCJcXHUyMDA1XFx1MjAwYVwiOyAvLyAmVGhpY2tTcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjA1NTU2ICYmIHdpZHRoIDw9IC0wLjA1NTU1KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwYVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjE2NjcgJiYgd2lkdGggPD0gLTAuMTY2Nikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwMDlcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZVRoaW5TcGFjZTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID49IC0wLjIyMjMgJiYgd2lkdGggPD0gLTAuMjIyMikge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBcIlxcdTIwNWZcXHUyMDYzXCI7IC8vICZOZWdhdGl2ZU1lZGl1bVNwYWNlO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPj0gLTAuMjc3OCAmJiB3aWR0aCA8PSAtMC4yNzc3KSB7XG4gICAgICB0aGlzLmNoYXJhY3RlciA9IFwiXFx1MjAwNVxcdTIwNjNcIjsgLy8gJk5lZ2F0aXZlVGhpY2tTcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hdGggbm9kZSBpbnRvIGEgTWF0aE1MLW5hbWVzcGFjZWQgRE9NIGVsZW1lbnQuXG4gICAqL1xuXG5cbiAgdG9Ob2RlKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2hhcmFjdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsIFwibXNwYWNlXCIpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0odGhpcy53aWR0aCkpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgbWF0aCBub2RlIGludG8gYW4gSFRNTCBtYXJrdXAgc3RyaW5nLlxuICAgKi9cblxuXG4gIHRvTWFya3VwKCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIFwiPG10ZXh0PlwiICsgdGhpcy5jaGFyYWN0ZXIgKyBcIjwvbXRleHQ+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjxtc3BhY2Ugd2lkdGg9XFxcIlwiICsgbWFrZUVtKHRoaXMud2lkdGgpICsgXCJcXFwiLz5cIjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBtYXRoIG5vZGUgaW50byBhIHN0cmluZywgc2ltaWxhciB0byBpbm5lclRleHQuXG4gICAqL1xuXG5cbiAgdG9UZXh0KCkge1xuICAgIGlmICh0aGlzLmNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCIgXCI7XG4gICAgfVxuICB9XG5cbn1cblxudmFyIG1hdGhNTFRyZWUgPSB7XG4gIE1hdGhOb2RlLFxuICBUZXh0Tm9kZSxcbiAgU3BhY2VOb2RlLFxuICBuZXdEb2N1bWVudEZyYWdtZW50XG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb252ZXJ0cyBhIHBhcnNlIHRyZWUgaW50byBhIGNvcnJlc3BvbmRpbmcgTWF0aE1MIHRyZWUuIFRoZSBtYWluXG4gKiBlbnRyeSBwb2ludCBpcyB0aGUgYGJ1aWxkTWF0aE1MYCBmdW5jdGlvbiwgd2hpY2ggdGFrZXMgYSBwYXJzZSB0cmVlIGZyb20gdGhlXG4gKiBwYXJzZXIuXG4gKi9cblxuLyoqXG4gKiBUYWtlcyBhIHN5bWJvbCBhbmQgY29udmVydHMgaXQgaW50byBhIE1hdGhNTCB0ZXh0IG5vZGUgYWZ0ZXIgcGVyZm9ybWluZ1xuICogb3B0aW9uYWwgcmVwbGFjZW1lbnQgZnJvbSBzeW1ib2xzLmpzLlxuICovXG52YXIgbWFrZVRleHQgPSBmdW5jdGlvbiBtYWtlVGV4dCh0ZXh0LCBtb2RlLCBvcHRpb25zKSB7XG4gIGlmIChzeW1ib2xzW21vZGVdW3RleHRdICYmIHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZSAmJiB0ZXh0LmNoYXJDb2RlQXQoMCkgIT09IDB4RDgzNSAmJiAhKGxpZ2F0dXJlcy5oYXNPd25Qcm9wZXJ0eSh0ZXh0KSAmJiBvcHRpb25zICYmIChvcHRpb25zLmZvbnRGYW1pbHkgJiYgb3B0aW9ucy5mb250RmFtaWx5LnNsaWNlKDQsIDYpID09PSBcInR0XCIgfHwgb3B0aW9ucy5mb250ICYmIG9wdGlvbnMuZm9udC5zbGljZSg0LCA2KSA9PT0gXCJ0dFwiKSkpIHtcbiAgICB0ZXh0ID0gc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleHQpO1xufTtcbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4gYXJyYXkgb2Ygbm9kZXMgaW4gYW4gPG1yb3c+IG5vZGUgaWYgbmVlZGVkLCBpLmUuLFxuICogdW5sZXNzIHRoZSBhcnJheSBoYXMgbGVuZ3RoIDEuICBBbHdheXMgcmV0dXJucyBhIHNpbmdsZSBub2RlLlxuICovXG5cbnZhciBtYWtlUm93ID0gZnVuY3Rpb24gbWFrZVJvdyhib2R5KSB7XG4gIGlmIChib2R5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBib2R5WzBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgYm9keSk7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIG1hdGggdmFyaWFudCBhcyBhIHN0cmluZyBvciBudWxsIGlmIG5vbmUgaXMgcmVxdWlyZWQuXG4gKi9cblxudmFyIGdldFZhcmlhbnQgPSBmdW5jdGlvbiBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB7XG4gIC8vIEhhbmRsZSBcXHRleHQuLi4gZm9udCBzcGVjaWZpZXJzIGFzIGJlc3Qgd2UgY2FuLlxuICAvLyBNYXRoTUwgaGFzIGEgbGltaXRlZCBsaXN0IG9mIGFsbG93YWJsZSBtYXRodmFyaWFudCBzcGVjaWZpZXJzOyBzZWVcbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL01hdGhNTDMvY2hhcHRlcjMuaHRtbCNwcmVzbS5jb21tYXR0XG4gIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRGYW1pbHkgPT09IFwidGV4dHNmXCIpIHtcbiAgICBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgICByZXR1cm4gXCJzYW5zLXNlcmlmLWJvbGQtaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgICAgcmV0dXJuIFwic2Fucy1zZXJpZi1pdGFsaWNcIjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgICAgcmV0dXJuIFwiYm9sZC1zYW5zLXNlcmlmXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInNhbnMtc2VyaWZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5mb250U2hhcGUgPT09IFwidGV4dGl0XCIgJiYgb3B0aW9ucy5mb250V2VpZ2h0ID09PSBcInRleHRiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZvbnRTaGFwZSA9PT0gXCJ0ZXh0aXRcIikge1xuICAgIHJldHVybiBcIml0YWxpY1wiO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9udFdlaWdodCA9PT0gXCJ0ZXh0YmZcIikge1xuICAgIHJldHVybiBcImJvbGRcIjtcbiAgfVxuXG4gIHZhciBmb250ID0gb3B0aW9ucy5mb250O1xuXG4gIGlmICghZm9udCB8fCBmb250ID09PSBcIm1hdGhub3JtYWxcIikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBncm91cC5tb2RlO1xuXG4gIGlmIChmb250ID09PSBcIm1hdGhpdFwiKSB7XG4gICAgcmV0dXJuIFwiaXRhbGljXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJib2xkc3ltYm9sXCIpIHtcbiAgICByZXR1cm4gZ3JvdXAudHlwZSA9PT0gXCJ0ZXh0b3JkXCIgPyBcImJvbGRcIiA6IFwiYm9sZC1pdGFsaWNcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhiZlwiKSB7XG4gICAgcmV0dXJuIFwiYm9sZFwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aGJiXCIpIHtcbiAgICByZXR1cm4gXCJkb3VibGUtc3RydWNrXCI7XG4gIH0gZWxzZSBpZiAoZm9udCA9PT0gXCJtYXRoZnJha1wiKSB7XG4gICAgcmV0dXJuIFwiZnJha3R1clwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHNjclwiIHx8IGZvbnQgPT09IFwibWF0aGNhbFwiKSB7XG4gICAgLy8gTWF0aE1MIG1ha2VzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gc2NyaXB0IGFuZCBjYWxsaWdyYXBoaWNcbiAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgfSBlbHNlIGlmIChmb250ID09PSBcIm1hdGhzZlwiKSB7XG4gICAgcmV0dXJuIFwic2Fucy1zZXJpZlwiO1xuICB9IGVsc2UgaWYgKGZvbnQgPT09IFwibWF0aHR0XCIpIHtcbiAgICByZXR1cm4gXCJtb25vc3BhY2VcIjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZ3JvdXAudGV4dDtcblxuICBpZiAodXRpbHMuY29udGFpbnMoW1wiXFxcXGltYXRoXCIsIFwiXFxcXGptYXRoXCJdLCB0ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN5bWJvbHNbbW9kZV1bdGV4dF0gJiYgc3ltYm9sc1ttb2RlXVt0ZXh0XS5yZXBsYWNlKSB7XG4gICAgdGV4dCA9IHN5bWJvbHNbbW9kZV1bdGV4dF0ucmVwbGFjZTtcbiAgfVxuXG4gIHZhciBmb250TmFtZSA9IGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0uZm9udE5hbWU7XG5cbiAgaWYgKGdldENoYXJhY3Rlck1ldHJpY3ModGV4dCwgZm9udE5hbWUsIG1vZGUpKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLmZvbnRNYXBbZm9udF0udmFyaWFudDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIG5vZGVzLCBidWlsZHMgdGhlbSwgYW5kIHJldHVybnMgYSBsaXN0IG9mIHRoZSBnZW5lcmF0ZWRcbiAqIE1hdGhNTCBub2Rlcy4gIEFsc28gY29tYmluZSBjb25zZWN1dGl2ZSA8bXRleHQ+IG91dHB1dHMgaW50byBhIHNpbmdsZVxuICogPG10ZXh0PiB0YWcuXG4gKi9cblxudmFyIGJ1aWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIGJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uLCBvcHRpb25zLCBpc09yZGdyb3VwKSB7XG4gIGlmIChleHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvblswXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoaXNPcmRncm91cCAmJiBncm91cCBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIGdyb3VwLnR5cGUgPT09IFwibW9cIikge1xuICAgICAgLy8gV2hlbiBUZVggd3JpdGVycyB3YW50IHRvIHN1cHByZXNzIHNwYWNpbmcgb24gYW4gb3BlcmF0b3IsXG4gICAgICAvLyB0aGV5IG9mdGVuIHB1dCB0aGUgb3BlcmF0b3IgYnkgaXRzZWxmIGluc2lkZSBicmFjZXMuXG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgICBncm91cC5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwZW1cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtncm91cF07XG4gIH1cblxuICB2YXIgZ3JvdXBzID0gW107XG4gIHZhciBsYXN0R3JvdXA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9ncm91cCA9IGJ1aWxkR3JvdXAoZXhwcmVzc2lvbltpXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoX2dyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUgJiYgbGFzdEdyb3VwIGluc3RhbmNlb2YgTWF0aE5vZGUpIHtcbiAgICAgIC8vIENvbmNhdGVuYXRlIGFkamFjZW50IDxtdGV4dD5zXG4gICAgICBpZiAoX2dyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtdGV4dCcgJiYgX2dyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSA9PT0gbGFzdEdyb3VwLmdldEF0dHJpYnV0ZSgnbWF0aHZhcmlhbnQnKSkge1xuICAgICAgICBsYXN0R3JvdXAuY2hpbGRyZW4ucHVzaCguLi5fZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgICBjb250aW51ZTsgLy8gQ29uY2F0ZW5hdGUgYWRqYWNlbnQgPG1uPnNcbiAgICAgIH0gZWxzZSBpZiAoX2dyb3VwLnR5cGUgPT09ICdtbicgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgbGFzdEdyb3VwLmNoaWxkcmVuLnB1c2goLi4uX2dyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgY29udGludWU7IC8vIENvbmNhdGVuYXRlIDxtbj4uLi48L21uPiBmb2xsb3dlZCBieSA8bWk+LjwvbWk+XG4gICAgICB9IGVsc2UgaWYgKF9ncm91cC50eXBlID09PSAnbWknICYmIF9ncm91cC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbGFzdEdyb3VwLnR5cGUgPT09ICdtbicpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIGNoaWxkLnRleHQgPT09ICcuJykge1xuICAgICAgICAgIGxhc3RHcm91cC5jaGlsZHJlbi5wdXNoKC4uLl9ncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobGFzdEdyb3VwLnR5cGUgPT09ICdtaScgJiYgbGFzdEdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgbGFzdENoaWxkID0gbGFzdEdyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQgaW5zdGFuY2VvZiBUZXh0Tm9kZSAmJiBsYXN0Q2hpbGQudGV4dCA9PT0gJ1xcdTAzMzgnICYmIChfZ3JvdXAudHlwZSA9PT0gJ21vJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21pJyB8fCBfZ3JvdXAudHlwZSA9PT0gJ21uJykpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkID0gX2dyb3VwLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgaWYgKF9jaGlsZCBpbnN0YW5jZW9mIFRleHROb2RlICYmIF9jaGlsZC50ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIE92ZXJsYXkgd2l0aCBjb21iaW5pbmcgY2hhcmFjdGVyIGxvbmcgc29saWR1c1xuICAgICAgICAgICAgX2NoaWxkLnRleHQgPSBfY2hpbGQudGV4dC5zbGljZSgwLCAxKSArIFwiXFx1MDMzOFwiICsgX2NoaWxkLnRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICBncm91cHMucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ3JvdXBzLnB1c2goX2dyb3VwKTtcbiAgICBsYXN0R3JvdXAgPSBfZ3JvdXA7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbi8qKlxuICogRXF1aXZhbGVudCB0byBidWlsZEV4cHJlc3Npb24sIGJ1dCB3cmFwcyB0aGUgZWxlbWVudHMgaW4gYW4gPG1yb3c+XG4gKiBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUuICBSZXR1cm5zIGEgc2luZ2xlIG5vZGUgaW5zdGVhZCBvZiBhbiBhcnJheS5cbiAqL1xuXG52YXIgYnVpbGRFeHByZXNzaW9uUm93ID0gZnVuY3Rpb24gYnVpbGRFeHByZXNzaW9uUm93KGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApIHtcbiAgcmV0dXJuIG1ha2VSb3coYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24sIG9wdGlvbnMsIGlzT3JkZ3JvdXApKTtcbn07XG4vKipcbiAqIFRha2VzIGEgZ3JvdXAgZnJvbSB0aGUgcGFyc2VyIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZ3JvdXBCdWlsZGVycyBmdW5jdGlvblxuICogb24gaXQgdG8gcHJvZHVjZSBhIE1hdGhNTCBub2RlLlxuICovXG5cbnZhciBidWlsZEdyb3VwID0gZnVuY3Rpb24gYnVpbGRHcm91cChncm91cCwgb3B0aW9ucykge1xuICBpZiAoIWdyb3VwKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiKTtcbiAgfVxuXG4gIGlmIChfbWF0aG1sR3JvdXBCdWlsZGVyc1tncm91cC50eXBlXSkge1xuICAgIC8vIENhbGwgdGhlIGdyb3VwQnVpbGRlcnMgZnVuY3Rpb25cbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdmFyIHJlc3VsdCA9IF9tYXRobWxHcm91cEJ1aWxkZXJzW2dyb3VwLnR5cGVdKGdyb3VwLCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICdcIiArIGdyb3VwLnR5cGUgKyBcIidcIik7XG4gIH1cbn07XG4vKipcbiAqIFRha2VzIGEgZnVsbCBwYXJzZSB0cmVlIGFuZCBzZXR0aW5ncyBhbmQgYnVpbGRzIGEgTWF0aE1MIHJlcHJlc2VudGF0aW9uIG9mXG4gKiBpdC4gSW4gcGFydGljdWxhciwgd2UgcHV0IHRoZSBlbGVtZW50cyBmcm9tIGJ1aWxkaW5nIHRoZSBwYXJzZSB0cmVlIGludG8gYVxuICogPHNlbWFudGljcz4gdGFnIHNvIHdlIGNhbiBhbHNvIGluY2x1ZGUgdGhhdCBUZVggc291cmNlIGFzIGFuIGFubm90YXRpb24uXG4gKlxuICogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHJldHVybiBhIGRvbVRyZWUgZWxlbWVudCB3aXRoIGEgYDxtYXRoPmAgaW5zaWRlIGl0IHNvXG4gKiB3ZSBjYW4gZG8gYXBwcm9wcmlhdGUgc3R5bGluZy5cbiAqL1xuXG5mdW5jdGlvbiBidWlsZE1hdGhNTCh0cmVlLCB0ZXhFeHByZXNzaW9uLCBvcHRpb25zLCBpc0Rpc3BsYXlNb2RlLCBmb3JNYXRobWxPbmx5KSB7XG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKHRyZWUsIG9wdGlvbnMpOyAvLyBUT0RPOiBNYWtlIGEgcGFzcyB0aHJ1IHRoZSBNYXRoTUwgc2ltaWxhciB0byBidWlsZEhUTUwudHJhdmVyc2VOb25TcGFjZU5vZGVzXG4gIC8vIGFuZCBhZGQgc3BhY2luZyBub2Rlcy4gVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBhZGphY2VudCB0byBtYXRoIG9wZXJhdG9yc1xuICAvLyBsaWtlIFxcc2luIG9yIFxcbGltIG9yIHRvIHN1YnN1cCBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbWF0aCBvcGVyYXRvcnMuXG4gIC8vIE1hdGhNTCB0YWtlcyBjYXJlIG9mIHRoZSBvdGhlciBzcGFjaW5nIGlzc3Vlcy5cbiAgLy8gV3JhcCB1cCB0aGUgZXhwcmVzc2lvbiBpbiBhbiBtcm93IHNvIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgc2VtYW50aWNzXG4gIC8vIHRhZyBjb3JyZWN0bHksIHVubGVzcyBpdCdzIGEgc2luZ2xlIDxtcm93PiBvciA8bXRhYmxlPi5cblxuICB2YXIgd3JhcHBlcjtcblxuICBpZiAoZXhwcmVzc2lvbi5sZW5ndGggPT09IDEgJiYgZXhwcmVzc2lvblswXSBpbnN0YW5jZW9mIE1hdGhOb2RlICYmIHV0aWxzLmNvbnRhaW5zKFtcIm1yb3dcIiwgXCJtdGFibGVcIl0sIGV4cHJlc3Npb25bMF0udHlwZSkpIHtcbiAgICB3cmFwcGVyID0gZXhwcmVzc2lvblswXTtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcm93XCIsIGV4cHJlc3Npb24pO1xuICB9IC8vIEJ1aWxkIGEgVGVYIGFubm90YXRpb24gb2YgdGhlIHNvdXJjZVxuXG5cbiAgdmFyIGFubm90YXRpb24gPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcImFubm90YXRpb25cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHRleEV4cHJlc3Npb24pXSk7XG4gIGFubm90YXRpb24uc2V0QXR0cmlidXRlKFwiZW5jb2RpbmdcIiwgXCJhcHBsaWNhdGlvbi94LXRleFwiKTtcbiAgdmFyIHNlbWFudGljcyA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwic2VtYW50aWNzXCIsIFt3cmFwcGVyLCBhbm5vdGF0aW9uXSk7XG4gIHZhciBtYXRoID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtYXRoXCIsIFtzZW1hbnRpY3NdKTtcbiAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIik7XG5cbiAgaWYgKGlzRGlzcGxheU1vZGUpIHtcbiAgICBtYXRoLnNldEF0dHJpYnV0ZShcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgfSAvLyBZb3UgY2FuJ3Qgc3R5bGUgPG1hdGg+IG5vZGVzLCBzbyB3ZSB3cmFwIHRoZSBub2RlIGluIGEgc3Bhbi5cbiAgLy8gTk9URTogVGhlIHNwYW4gY2xhc3MgaXMgbm90IHR5cGVkIHRvIGhhdmUgPG1hdGg+IG5vZGVzIGFzIGNoaWxkcmVuLCBhbmRcbiAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjaGlsZHJlbiB0eXBlIG1vcmUgZ2VuZXJpYyBzaW5jZSB0aGUgY2hpbGRyZW5cbiAgLy8gb2Ygc3BhbiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBtb3JlIGZpZWxkcyBpbiBgYnVpbGRIdG1sYCBjb250ZXh0cy5cblxuXG4gIHZhciB3cmFwcGVyQ2xhc3MgPSBmb3JNYXRobWxPbmx5ID8gXCJrYXRleFwiIDogXCJrYXRleC1tYXRobWxcIjsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3Bhbihbd3JhcHBlckNsYXNzXSwgW21hdGhdKTtcbn1cblxudmFyIG9wdGlvbnNGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiBvcHRpb25zRnJvbVNldHRpbmdzKHNldHRpbmdzKSB7XG4gIHJldHVybiBuZXcgT3B0aW9ucyh7XG4gICAgc3R5bGU6IHNldHRpbmdzLmRpc3BsYXlNb2RlID8gU3R5bGUkMS5ESVNQTEFZIDogU3R5bGUkMS5URVhULFxuICAgIG1heFNpemU6IHNldHRpbmdzLm1heFNpemUsXG4gICAgbWluUnVsZVRoaWNrbmVzczogc2V0dGluZ3MubWluUnVsZVRoaWNrbmVzc1xuICB9KTtcbn07XG5cbnZhciBkaXNwbGF5V3JhcCA9IGZ1bmN0aW9uIGRpc3BsYXlXcmFwKG5vZGUsIHNldHRpbmdzKSB7XG4gIGlmIChzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgIHZhciBjbGFzc2VzID0gW1wia2F0ZXgtZGlzcGxheVwiXTtcblxuICAgIGlmIChzZXR0aW5ncy5sZXFubykge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwibGVxbm9cIik7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmZsZXFuKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJmbGVxblwiKTtcbiAgICB9XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgW25vZGVdKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxudmFyIGJ1aWxkVHJlZSA9IGZ1bmN0aW9uIGJ1aWxkVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIga2F0ZXhOb2RlO1xuXG4gIGlmIChzZXR0aW5ncy5vdXRwdXQgPT09IFwibWF0aG1sXCIpIHtcbiAgICByZXR1cm4gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIHRydWUpO1xuICB9IGVsc2UgaWYgKHNldHRpbmdzLm91dHB1dCA9PT0gXCJodG1sXCIpIHtcbiAgICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gICAga2F0ZXhOb2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wia2F0ZXhcIl0sIFtodG1sTm9kZV0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRoTUxOb2RlID0gYnVpbGRNYXRoTUwodHJlZSwgZXhwcmVzc2lvbiwgb3B0aW9ucywgc2V0dGluZ3MuZGlzcGxheU1vZGUsIGZhbHNlKTtcblxuICAgIHZhciBfaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG5cbiAgICBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW21hdGhNTE5vZGUsIF9odG1sTm9kZV0pO1xuICB9XG5cbiAgcmV0dXJuIGRpc3BsYXlXcmFwKGthdGV4Tm9kZSwgc2V0dGluZ3MpO1xufTtcbnZhciBidWlsZEhUTUxUcmVlID0gZnVuY3Rpb24gYnVpbGRIVE1MVHJlZSh0cmVlLCBleHByZXNzaW9uLCBzZXR0aW5ncykge1xuICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICB2YXIgaHRtbE5vZGUgPSBidWlsZEhUTUwodHJlZSwgb3B0aW9ucyk7XG4gIHZhciBrYXRleE5vZGUgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJrYXRleFwiXSwgW2h0bWxOb2RlXSk7XG4gIHJldHVybiBkaXNwbGF5V3JhcChrYXRleE5vZGUsIHNldHRpbmdzKTtcbn07XG5cbi8qKlxuICogVGhpcyBmaWxlIHByb3ZpZGVzIHN1cHBvcnQgdG8gYnVpbGRNYXRoTUwuanMgYW5kIGJ1aWxkSFRNTC5qc1xuICogZm9yIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgcmVuZGVyZWQgZnJvbSBTVkcgZmlsZXNcbiAqIGFuZCBvdGhlciBDU1MgdHJpY2tlcnkuXG4gKi9cbnZhciBzdHJldGNoeUNvZGVQb2ludCA9IHtcbiAgd2lkZWhhdDogXCJeXCIsXG4gIHdpZGVjaGVjazogXCLLh1wiLFxuICB3aWRldGlsZGU6IFwiflwiLFxuICB1dGlsZGU6IFwiflwiLFxuICBvdmVybGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgdW5kZXJsZWZ0YXJyb3c6IFwiXFx1MjE5MFwiLFxuICB4bGVmdGFycm93OiBcIlxcdTIxOTBcIixcbiAgb3ZlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB1bmRlcnJpZ2h0YXJyb3c6IFwiXFx1MjE5MlwiLFxuICB4cmlnaHRhcnJvdzogXCJcXHUyMTkyXCIsXG4gIHVuZGVyYnJhY2U6IFwiXFx1MjNkZlwiLFxuICBvdmVyYnJhY2U6IFwiXFx1MjNkZVwiLFxuICBvdmVyZ3JvdXA6IFwiXFx1MjNlMFwiLFxuICB1bmRlcmdyb3VwOiBcIlxcdTIzZTFcIixcbiAgb3ZlcmxlZnRyaWdodGFycm93OiBcIlxcdTIxOTRcIixcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIHhsZWZ0cmlnaHRhcnJvdzogXCJcXHUyMTk0XCIsXG4gIE92ZXJyaWdodGFycm93OiBcIlxcdTIxZDJcIixcbiAgeFJpZ2h0YXJyb3c6IFwiXFx1MjFkMlwiLFxuICBvdmVybGVmdGhhcnBvb246IFwiXFx1MjFiY1wiLFxuICB4bGVmdGhhcnBvb251cDogXCJcXHUyMWJjXCIsXG4gIG92ZXJyaWdodGhhcnBvb246IFwiXFx1MjFjMFwiLFxuICB4cmlnaHRoYXJwb29udXA6IFwiXFx1MjFjMFwiLFxuICB4TGVmdGFycm93OiBcIlxcdTIxZDBcIixcbiAgeExlZnRyaWdodGFycm93OiBcIlxcdTIxZDRcIixcbiAgeGhvb2tsZWZ0YXJyb3c6IFwiXFx1MjFhOVwiLFxuICB4aG9va3JpZ2h0YXJyb3c6IFwiXFx1MjFhYVwiLFxuICB4bWFwc3RvOiBcIlxcdTIxYTZcIixcbiAgeHJpZ2h0aGFycG9vbmRvd246IFwiXFx1MjFjMVwiLFxuICB4bGVmdGhhcnBvb25kb3duOiBcIlxcdTIxYmRcIixcbiAgeHJpZ2h0bGVmdGhhcnBvb25zOiBcIlxcdTIxY2NcIixcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBcIlxcdTIxY2JcIixcbiAgeHR3b2hlYWRsZWZ0YXJyb3c6IFwiXFx1MjE5ZVwiLFxuICB4dHdvaGVhZHJpZ2h0YXJyb3c6IFwiXFx1MjFhMFwiLFxuICB4bG9uZ2VxdWFsOiBcIj1cIixcbiAgeHRvZnJvbTogXCJcXHUyMWM0XCIsXG4gIHhyaWdodGxlZnRhcnJvd3M6IFwiXFx1MjFjNFwiLFxuICB4cmlnaHRlcXVpbGlicml1bTogXCJcXHUyMWNjXCIsXG4gIC8vIE5vdCBhIHBlcmZlY3QgbWF0Y2guXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFwiXFx1MjFjYlwiLFxuICAvLyBOb25lIGJldHRlciBhdmFpbGFibGUuXG4gIFwiXFxcXGNkcmlnaHRhcnJvd1wiOiBcIlxcdTIxOTJcIixcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogXCJcXHUyMTkwXCIsXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFwiPVwiXG59O1xuXG52YXIgbWF0aE1Mbm9kZSA9IGZ1bmN0aW9uIG1hdGhNTG5vZGUobGFiZWwpIHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShzdHJldGNoeUNvZGVQb2ludFtsYWJlbC5yZXBsYWNlKC9eXFxcXC8sICcnKV0pXSk7XG4gIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIE1hbnkgb2YgdGhlIEthVGVYIFNWRyBpbWFnZXMgaGF2ZSBiZWVuIGFkYXB0ZWQgZnJvbSBnbHlwaHMgaW4gS2FUZVggZm9udHMuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgRGVzaWduIFNjaWVuY2UsIEluYy4gKDx3d3cubWF0aGpheC5vcmc+KVxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcgS2hhbiBBY2FkZW15ICg8d3d3LmtoYW5hY2FkZW15Lm9yZz4pXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS5cbi8vIFNlZSBcXG5odHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTFxuLy8gVmVyeSBMb25nIFNWR3Ncbi8vICAgIE1hbnkgb2YgdGhlIEthVGVYIHN0cmV0Y2h5IHdpZGUgZWxlbWVudHMgdXNlIGEgbG9uZyBTVkcgaW1hZ2UgYW5kIGFuXG4vLyAgICBvdmVyZmxvdzogaGlkZGVuIHRhY3RpYyB0byBhY2hpZXZlIGEgc3RyZXRjaHkgaW1hZ2Ugd2hpbGUgYXZvaWRpbmdcbi8vICAgIGRpc3RvcnRpb24gb2YgYXJyb3doZWFkcyBvciBicmFjZSBjb3JuZXJzLlxuLy8gICAgVGhlIFNWRyB0eXBpY2FsbHkgY29udGFpbnMgYSB2ZXJ5IGxvbmcgKDQwMCBlbSkgYXJyb3cuXG4vLyAgICBUaGUgU1ZHIGlzIGluIGEgY29udGFpbmVyIHNwYW4gdGhhdCBoYXMgb3ZlcmZsb3c6IGhpZGRlbiwgc28gdGhlIHNwYW5cbi8vICAgIGFjdHMgbGlrZSBhIHdpbmRvdyB0aGF0IGV4cG9zZXMgb25seSBwYXJ0IG9mIHRoZSAgU1ZHLlxuLy8gICAgVGhlIFNWRyBhbHdheXMgaGFzIGEgbG9uZ2VyLCB0aGlubmVyIGFzcGVjdCByYXRpbyB0aGFuIHRoZSBjb250YWluZXIgc3Bhbi5cbi8vICAgIEFmdGVyIHRoZSBTVkcgZmlsbHMgMTAwJSBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgc3Bhbixcbi8vICAgIHRoZXJlIGlzIGEgbG9uZyBhcnJvdyBzaGFmdCBsZWZ0IG92ZXIuIFRoYXQgbGVmdC1vdmVyIHNoYWZ0IGlzIG5vdCBzaG93bi5cbi8vICAgIEluc3RlYWQsIGl0IGlzIHNsaWNlZCBvZmYgYmVjYXVzZSB0aGUgc3BhbidzIENTUyBoYXMgb3ZlcmZsb3c6IGhpZGRlbi5cbi8vICAgIFRodXMsIHRoZSByZWFkZXIgc2VlcyBhbiBhcnJvdyB0aGF0IG1hdGNoZXMgdGhlIHN1YmplY3QgbWF0dGVyIHdpZHRoXG4vLyAgICB3aXRob3V0IGRpc3RvcnRpb24uXG4vLyAgICBTb21lIGZ1bmN0aW9ucywgc3VjaCBhcyBcXGNhbmNlbCwgbmVlZCB0byB2YXJ5IHRoZWlyIGFzcGVjdCByYXRpby4gVGhlc2Vcbi8vICAgIGZ1bmN0aW9ucyBkbyBub3QgZ2V0IHRoZSBvdmVyZmxvdyBTVkcgdHJlYXRtZW50LlxuLy8gU2Vjb25kIEJydXNoIFN0cm9rZVxuLy8gICAgTG93IHJlc29sdXRpb24gbW9uaXRvcnMgc3RydWdnbGUgdG8gZGlzcGxheSBpbWFnZXMgaW4gZmluZSBkZXRhaWwuXG4vLyAgICBTbyBicm93c2VycyBhcHBseSBhbnRpLWFsaWFzaW5nLiBBIGxvbmcgc3RyYWlnaHQgYXJyb3cgc2hhZnQgdGhlcmVmb3JlXG4vLyAgICB3aWxsIHNvbWV0aW1lcyBhcHBlYXIgYXMgaWYgaXQgaGFzIGEgYmx1cnJlZCBlZGdlLlxuLy8gICAgVG8gbWl0aWdhdGUgdGhpcywgdGhlc2UgU1ZHIGZpbGVzIGNvbnRhaW4gYSBzZWNvbmQgXCJicnVzaC1zdHJva2VcIiBvbiB0aGVcbi8vICAgIGFycm93IHNoYWZ0cy4gVGhhdCBpcywgYSBzZWNvbmQgbG9uZyB0aGluIHJlY3Rhbmd1bGFyIFNWRyBwYXRoIGhhcyBiZWVuXG4vLyAgICB3cml0dGVuIGRpcmVjdGx5IG9uIHRvcCBvZiBlYWNoIGFycm93IHNoYWZ0LiBUaGlzIHJlaW5mb3JjZW1lbnQgY2F1c2VzXG4vLyAgICBzb21lIG9mIHRoZSBzY3JlZW4gcGl4ZWxzIHRvIGRpc3BsYXkgYXMgYmxhY2sgaW5zdGVhZCBvZiB0aGUgYW50aS1hbGlhc2VkXG4vLyAgICBncmF5IHBpeGVsIHRoYXQgYSAgc2luZ2xlIHBhdGggd291bGQgZ2VuZXJhdGUuIFNvIHdlIGdldCBhcnJvdyBzaGFmdHNcbi8vICAgIHdob3NlIGVkZ2VzIGFwcGVhciB0byBiZSBzaGFycGVyLlxuLy8gSW4gdGhlIGthdGV4SW1hZ2VzRGF0YSBvYmplY3QganVzdCBiZWxvdywgdGhlIGRpbWVuc2lvbnMgYWxsXG4vLyBjb3JyZXNwb25kIHRvIHBhdGggZ2VvbWV0cnkgaW5zaWRlIHRoZSByZWxldmFudCBTVkcuXG4vLyBGb3IgZXhhbXBsZSwgXFxvdmVycmlnaHRhcnJvdyB1c2VzIHRoZSBzYW1lIGFycm93aGVhZCBhcyBnbHlwaCBVKzIxOTJcbi8vIGZyb20gdGhlIEthVGVYIE1haW4gZm9udC4gVGhlIHNjYWxpbmcgZmFjdG9yIGlzIDEwMDAuXG4vLyBUaGF0IGlzLCBpbnNpZGUgdGhlIGZvbnQsIHRoYXQgYXJyb3doZWFkIGlzIDUyMiB1bml0cyB0YWxsLCB3aGljaFxuLy8gY29ycmVzcG9uZHMgdG8gMC41MjIgZW0gaW5zaWRlIHRoZSBkb2N1bWVudC5cblxuXG52YXIga2F0ZXhJbWFnZXNEYXRhID0ge1xuICAvLyAgIHBhdGgocyksIG1pbldpZHRoLCBoZWlnaHQsIGFsaWduXG4gIG92ZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgb3ZlcmxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgdW5kZXJyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgdW5kZXJsZWZ0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIl0sIDAuODg4LCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIHhyaWdodGFycm93OiBbW1wicmlnaHRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgXCJcXFxcY2RyaWdodGFycm93XCI6IFtbXCJyaWdodGFycm93XCJdLCAzLjAsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgLy8gQ0QgbWlud3dpZHRoMi41cGNcbiAgeGxlZnRhcnJvdzogW1tcImxlZnRhcnJvd1wiXSwgMS40NjksIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgXCJcXFxcY2RsZWZ0YXJyb3dcIjogW1tcImxlZnRhcnJvd1wiXSwgMy4wLCA1MjIsIFwieE1pbllNaW5cIl0sXG4gIE92ZXJyaWdodGFycm93OiBbW1wiZG91YmxlcmlnaHRhcnJvd1wiXSwgMC44ODgsIDU2MCwgXCJ4TWF4WU1pblwiXSxcbiAgeFJpZ2h0YXJyb3c6IFtbXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNYXhZTWluXCJdLFxuICB4TGVmdGFycm93OiBbW1wiZG91YmxlbGVmdGFycm93XCJdLCAxLjUyNiwgNTYwLCBcInhNaW5ZTWluXCJdLFxuICBvdmVybGVmdGhhcnBvb246IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29udXA6IFtbXCJsZWZ0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgeGxlZnRoYXJwb29uZG93bjogW1tcImxlZnRoYXJwb29uZG93blwiXSwgMC44ODgsIDUyMiwgXCJ4TWluWU1pblwiXSxcbiAgb3ZlcnJpZ2h0aGFycG9vbjogW1tcInJpZ2h0aGFycG9vblwiXSwgMC44ODgsIDUyMiwgXCJ4TWF4WU1pblwiXSxcbiAgeHJpZ2h0aGFycG9vbnVwOiBbW1wicmlnaHRoYXJwb29uXCJdLCAwLjg4OCwgNTIyLCBcInhNYXhZTWluXCJdLFxuICB4cmlnaHRoYXJwb29uZG93bjogW1tcInJpZ2h0aGFycG9vbmRvd25cIl0sIDAuODg4LCA1MjIsIFwieE1heFlNaW5cIl0sXG4gIHhsb25nZXF1YWw6IFtbXCJsb25nZXF1YWxcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIFwiXFxcXGNkbG9uZ2VxdWFsXCI6IFtbXCJsb25nZXF1YWxcIl0sIDMuMCwgMzM0LCBcInhNaW5ZTWluXCJdLFxuICB4dHdvaGVhZGxlZnRhcnJvdzogW1tcInR3b2hlYWRsZWZ0YXJyb3dcIl0sIDAuODg4LCAzMzQsIFwieE1pbllNaW5cIl0sXG4gIHh0d29oZWFkcmlnaHRhcnJvdzogW1tcInR3b2hlYWRyaWdodGFycm93XCJdLCAwLjg4OCwgMzM0LCBcInhNYXhZTWluXCJdLFxuICBvdmVybGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAwLjg4OCwgNTIyXSxcbiAgb3ZlcmJyYWNlOiBbW1wibGVmdGJyYWNlXCIsIFwibWlkYnJhY2VcIiwgXCJyaWdodGJyYWNlXCJdLCAxLjYsIDU0OF0sXG4gIHVuZGVyYnJhY2U6IFtbXCJsZWZ0YnJhY2V1bmRlclwiLCBcIm1pZGJyYWNldW5kZXJcIiwgXCJyaWdodGJyYWNldW5kZXJcIl0sIDEuNiwgNTQ4XSxcbiAgdW5kZXJsZWZ0cmlnaHRhcnJvdzogW1tcImxlZnRhcnJvd1wiLCBcInJpZ2h0YXJyb3dcIl0sIDAuODg4LCA1MjJdLFxuICB4bGVmdHJpZ2h0YXJyb3c6IFtbXCJsZWZ0YXJyb3dcIiwgXCJyaWdodGFycm93XCJdLCAxLjc1LCA1MjJdLFxuICB4TGVmdHJpZ2h0YXJyb3c6IFtbXCJkb3VibGVsZWZ0YXJyb3dcIiwgXCJkb3VibGVyaWdodGFycm93XCJdLCAxLjc1LCA1NjBdLFxuICB4cmlnaHRsZWZ0aGFycG9vbnM6IFtbXCJsZWZ0aGFycG9vbmRvd25wbHVzXCIsIFwicmlnaHRoYXJwb29ucGx1c1wiXSwgMS43NSwgNzE2XSxcbiAgeGxlZnRyaWdodGhhcnBvb25zOiBbW1wibGVmdGhhcnBvb25wbHVzXCIsIFwicmlnaHRoYXJwb29uZG93bnBsdXNcIl0sIDEuNzUsIDcxNl0sXG4gIHhob29rbGVmdGFycm93OiBbW1wibGVmdGFycm93XCIsIFwicmlnaHRob29rXCJdLCAxLjA4LCA1MjJdLFxuICB4aG9va3JpZ2h0YXJyb3c6IFtbXCJsZWZ0aG9va1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuMDgsIDUyMl0sXG4gIG92ZXJsaW5lc2VnbWVudDogW1tcImxlZnRsaW5lc2VnbWVudFwiLCBcInJpZ2h0bGluZXNlZ21lbnRcIl0sIDAuODg4LCA1MjJdLFxuICB1bmRlcmxpbmVzZWdtZW50OiBbW1wibGVmdGxpbmVzZWdtZW50XCIsIFwicmlnaHRsaW5lc2VnbWVudFwiXSwgMC44ODgsIDUyMl0sXG4gIG92ZXJncm91cDogW1tcImxlZnRncm91cFwiLCBcInJpZ2h0Z3JvdXBcIl0sIDAuODg4LCAzNDJdLFxuICB1bmRlcmdyb3VwOiBbW1wibGVmdGdyb3VwdW5kZXJcIiwgXCJyaWdodGdyb3VwdW5kZXJcIl0sIDAuODg4LCAzNDJdLFxuICB4bWFwc3RvOiBbW1wibGVmdG1hcHN0b1wiLCBcInJpZ2h0YXJyb3dcIl0sIDEuNSwgNTIyXSxcbiAgeHRvZnJvbTogW1tcImxlZnRUb0Zyb21cIiwgXCJyaWdodFRvRnJvbVwiXSwgMS43NSwgNTI4XSxcbiAgLy8gVGhlIG5leHQgdGhyZWUgYXJyb3dzIGFyZSBmcm9tIHRoZSBtaGNoZW0gcGFja2FnZS5cbiAgLy8gSW4gbWhjaGVtLnN0eSwgbWluLWxlbmd0aCBpcyAyLjBlbS4gQnV0IHRoZXNlIGFycm93cyBtaWdodCBhcHBlYXIgaW4gdGhlXG4gIC8vIGRvY3VtZW50IGFzIFxceHJpZ2h0YXJyb3cgb3IgXFx4cmlnaHRsZWZ0aGFycG9vbnMuIFRob3NlIGhhdmVcbiAgLy8gbWluLWxlbmd0aCA9IDEuNzVlbSwgc28gd2Ugc2V0IG1pbi1sZW5ndGggb24gdGhlc2UgbmV4dCB0aHJlZSB0byBtYXRjaC5cbiAgeHJpZ2h0bGVmdGFycm93czogW1tcImJhcmFib3ZlbGVmdGFycm93XCIsIFwicmlnaHRhcnJvd2Fib3ZlYmFyXCJdLCAxLjc1LCA5MDFdLFxuICB4cmlnaHRlcXVpbGlicml1bTogW1tcImJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vblwiLCBcInJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXJcIl0sIDEuNzUsIDcxNl0sXG4gIHhsZWZ0ZXF1aWxpYnJpdW06IFtbXCJzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb25cIiwgXCJzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyXCJdLCAxLjc1LCA3MTZdXG59O1xuXG52YXIgZ3JvdXBMZW5ndGggPSBmdW5jdGlvbiBncm91cExlbmd0aChhcmcpIHtcbiAgaWYgKGFyZy50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICByZXR1cm4gYXJnLmJvZHkubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG52YXIgc3ZnU3BhbiA9IGZ1bmN0aW9uIHN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGEgc3BhbiB3aXRoIGlubGluZSBTVkcgZm9yIHRoZSBlbGVtZW50LlxuICBmdW5jdGlvbiBidWlsZFN2Z1NwYW5fKCkge1xuICAgIHZhciB2aWV3Qm94V2lkdGggPSA0MDAwMDA7IC8vIGRlZmF1bHRcblxuICAgIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKFtcIndpZGVoYXRcIiwgXCJ3aWRlY2hlY2tcIiwgXCJ3aWRldGlsZGVcIiwgXCJ1dGlsZGVcIl0sIGxhYmVsKSkge1xuICAgICAgLy8gRWFjaCB0eXBlIGluIHRoZSBgaWZgIHN0YXRlbWVudCBjb3JyZXNwb25kcyB0byBvbmUgb2YgdGhlIFBhcnNlTm9kZVxuICAgICAgLy8gdHlwZXMgYmVsb3cuIFRoaXMgbmFycm93aW5nIGlzIHJlcXVpcmVkIHRvIGFjY2VzcyBgZ3JwLmJhc2VgLlxuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgdmFyIGdycCA9IGdyb3VwOyAvLyBUaGVyZSBhcmUgZm91ciBTVkcgaW1hZ2VzIGF2YWlsYWJsZSBmb3IgZWFjaCBmdW5jdGlvbi5cbiAgICAgIC8vIENob29zZSBhIHRhbGxlciBpbWFnZSB3aGVuIHRoZXJlIGFyZSBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICAgIHZhciBudW1DaGFycyA9IGdyb3VwTGVuZ3RoKGdycC5iYXNlKTtcbiAgICAgIHZhciB2aWV3Qm94SGVpZ2h0O1xuICAgICAgdmFyIHBhdGhOYW1lO1xuXG4gICAgICB2YXIgX2hlaWdodDtcblxuICAgICAgaWYgKG51bUNoYXJzID4gNSkge1xuICAgICAgICBpZiAobGFiZWwgPT09IFwid2lkZWhhdFwiIHx8IGxhYmVsID09PSBcIndpZGVjaGVja1wiKSB7XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IDQyMDtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSAyMzY0O1xuICAgICAgICAgIF9oZWlnaHQgPSAwLjQyO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBcIjRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94SGVpZ2h0ID0gMzEyO1xuICAgICAgICAgIHZpZXdCb3hXaWR0aCA9IDIzNDA7XG4gICAgICAgICAgX2hlaWdodCA9IDAuMzQ7XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlNFwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaW1nSW5kZXggPSBbMSwgMSwgMiwgMiwgMywgM11bbnVtQ2hhcnNdO1xuXG4gICAgICAgIGlmIChsYWJlbCA9PT0gXCJ3aWRlaGF0XCIgfHwgbGFiZWwgPT09IFwid2lkZWNoZWNrXCIpIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgMTA2MiwgMjM2NCwgMjM2NCwgMjM2NF1baW1nSW5kZXhdO1xuICAgICAgICAgIHZpZXdCb3hIZWlnaHQgPSBbMCwgMjM5LCAzMDAsIDM2MCwgNDIwXVtpbWdJbmRleF07XG4gICAgICAgICAgX2hlaWdodCA9IFswLCAwLjI0LCAwLjMsIDAuMywgMC4zNiwgMC40Ml1baW1nSW5kZXhdO1xuICAgICAgICAgIHBhdGhOYW1lID0gbGFiZWwgKyBpbWdJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2aWV3Qm94V2lkdGggPSBbMCwgNjAwLCAxMDMzLCAyMzM5LCAyMzQwXVtpbWdJbmRleF07XG4gICAgICAgICAgdmlld0JveEhlaWdodCA9IFswLCAyNjAsIDI4NiwgMzA2LCAzMTJdW2ltZ0luZGV4XTtcbiAgICAgICAgICBfaGVpZ2h0ID0gWzAsIDAuMjYsIDAuMjg2LCAwLjMsIDAuMzA2LCAwLjM0XVtpbWdJbmRleF07XG4gICAgICAgICAgcGF0aE5hbWUgPSBcInRpbGRlXCIgKyBpbWdJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcGF0aCA9IG5ldyBQYXRoTm9kZShwYXRoTmFtZSk7XG4gICAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodCksXG4gICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodCxcbiAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwibm9uZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICAgIHZhciBkYXRhID0ga2F0ZXhJbWFnZXNEYXRhW2xhYmVsXTtcbiAgICAgIHZhciBbcGF0aHMsIF9taW5XaWR0aCwgX3ZpZXdCb3hIZWlnaHRdID0gZGF0YTtcblxuICAgICAgdmFyIF9oZWlnaHQyID0gX3ZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuXG4gICAgICB2YXIgbnVtU3ZnQ2hpbGRyZW4gPSBwYXRocy5sZW5ndGg7XG4gICAgICB2YXIgd2lkdGhDbGFzc2VzO1xuICAgICAgdmFyIGFsaWducztcblxuICAgICAgaWYgKG51bVN2Z0NoaWxkcmVuID09PSAxKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWU6IEFsbCB0aGVzZSBjYXNlcyBtdXN0IGJlIG9mIHRoZSA0LXR1cGxlIHR5cGUuXG4gICAgICAgIHZhciBhbGlnbjEgPSBkYXRhWzNdO1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoaWRlLXRhaWxcIl07XG4gICAgICAgIGFsaWducyA9IFthbGlnbjFdO1xuICAgICAgfSBlbHNlIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMikge1xuICAgICAgICB3aWR0aENsYXNzZXMgPSBbXCJoYWxmYXJyb3ctbGVmdFwiLCBcImhhbGZhcnJvdy1yaWdodFwiXTtcbiAgICAgICAgYWxpZ25zID0gW1wieE1pbllNaW5cIiwgXCJ4TWF4WU1pblwiXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtU3ZnQ2hpbGRyZW4gPT09IDMpIHtcbiAgICAgICAgd2lkdGhDbGFzc2VzID0gW1wiYnJhY2UtbGVmdFwiLCBcImJyYWNlLWNlbnRlclwiLCBcImJyYWNlLXJpZ2h0XCJdO1xuICAgICAgICBhbGlnbnMgPSBbXCJ4TWluWU1pblwiLCBcInhNaWRZTWluXCIsIFwieE1heFlNaW5cIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnRcXG4gICAgICAgICAgICAgICAgICAgIFwiICsgbnVtU3ZnQ2hpbGRyZW4gKyBcIiBjaGlsZHJlbi5cIik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtU3ZnQ2hpbGRyZW47IGkrKykge1xuICAgICAgICB2YXIgX3BhdGggPSBuZXcgUGF0aE5vZGUocGF0aHNbaV0pO1xuXG4gICAgICAgIHZhciBfc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtfcGF0aF0sIHtcbiAgICAgICAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICAgICAgICBcImhlaWdodFwiOiBtYWtlRW0oX2hlaWdodDIpLFxuICAgICAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgX3ZpZXdCb3hIZWlnaHQsXG4gICAgICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IGFsaWduc1tpXSArIFwiIHNsaWNlXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIF9zcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW3dpZHRoQ2xhc3Nlc1tpXV0sIFtfc3ZnTm9kZV0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChudW1TdmdDaGlsZHJlbiA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGFuOiBfc3BhbixcbiAgICAgICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oX2hlaWdodDIpO1xuICAgICAgICAgIHNwYW5zLnB1c2goX3NwYW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNwYW46IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cmV0Y2h5XCJdLCBzcGFucywgb3B0aW9ucyksXG4gICAgICAgIG1pbldpZHRoOiBfbWluV2lkdGgsXG4gICAgICAgIGhlaWdodDogX2hlaWdodDJcbiAgICAgIH07XG4gICAgfVxuICB9IC8vIGJ1aWxkU3ZnU3Bhbl8oKVxuXG5cbiAgdmFyIHtcbiAgICBzcGFuLFxuICAgIG1pbldpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gYnVpbGRTdmdTcGFuXygpOyAvLyBOb3RlIHRoYXQgd2UgYXJlIHJldHVybmluZyBzcGFuLmRlcHRoID0gMC5cbiAgLy8gQW55IGFkanVzdG1lbnRzIHJlbGF0aXZlIHRvIHRoZSBiYXNlbGluZSBtdXN0IGJlIGRvbmUgaW4gYnVpbGRIVE1MLlxuXG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuXG4gIGlmIChtaW5XaWR0aCA+IDApIHtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gbWFrZUVtKG1pbldpZHRoKTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGVuY2xvc2VTcGFuID0gZnVuY3Rpb24gZW5jbG9zZVNwYW4oaW5uZXIsIGxhYmVsLCB0b3BQYWQsIGJvdHRvbVBhZCwgb3B0aW9ucykge1xuICAvLyBSZXR1cm4gYW4gaW1hZ2Ugc3BhbiBmb3IgXFxjYW5jZWwsIFxcYmNhbmNlbCwgXFx4Y2FuY2VsLCBcXGZib3gsIG9yIFxcYW5nbFxuICB2YXIgaW1nO1xuICB2YXIgdG90YWxIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIHRvcFBhZCArIGJvdHRvbVBhZDtcblxuICBpZiAoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChsYWJlbCkpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBsYWJlbF0sIFtdLCBvcHRpb25zKTtcblxuICAgIGlmIChsYWJlbCA9PT0gXCJmYm94XCIpIHtcbiAgICAgIHZhciBjb2xvciA9IG9wdGlvbnMuY29sb3IgJiYgb3B0aW9ucy5nZXRDb2xvcigpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgaW1nLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFxcY2FuY2VsLCBcXGJjYW5jZWwsIG9yIFxceGNhbmNlbFxuICAgIC8vIFNpbmNlIFxcY2FuY2VsJ3MgU1ZHIGlzIGlubGluZSBhbmQgaXQgb21pdHMgdGhlIHZpZXdCb3ggYXR0cmlidXRlLFxuICAgIC8vIGl0cyBzdHJva2Utd2lkdGggd2lsbCBub3QgdmFyeSB3aXRoIHNwYW4gYXJlYS5cbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIGlmICgvXltieF1jYW5jZWwkLy50ZXN0KGxhYmVsKSkge1xuICAgICAgbGluZXMucHVzaChuZXcgTGluZU5vZGUoe1xuICAgICAgICBcIngxXCI6IFwiMFwiLFxuICAgICAgICBcInkxXCI6IFwiMFwiLFxuICAgICAgICBcIngyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInkyXCI6IFwiMTAwJVwiLFxuICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBcIjAuMDQ2ZW1cIlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICgvXng/Y2FuY2VsJC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGxpbmVzLnB1c2gobmV3IExpbmVOb2RlKHtcbiAgICAgICAgXCJ4MVwiOiBcIjBcIixcbiAgICAgICAgXCJ5MVwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ4MlwiOiBcIjEwMCVcIixcbiAgICAgICAgXCJ5MlwiOiBcIjBcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCIwLjA0NmVtXCJcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKGxpbmVzLCB7XG4gICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHRvdGFsSGVpZ2h0KVxuICAgIH0pO1xuICAgIGltZyA9IGJ1aWxkQ29tbW9uLm1ha2VTdmdTcGFuKFtdLCBbc3ZnTm9kZV0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaW1nLmhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICBpbWcuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgcmV0dXJuIGltZztcbn07XG5cbnZhciBzdHJldGNoeSA9IHtcbiAgZW5jbG9zZVNwYW4sXG4gIG1hdGhNTG5vZGUsXG4gIHN2Z1NwYW5cbn07XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBub2RlIGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGl0IHdpdGggc3RyaWN0ZXJcbiAqIHR5cGluZy4gVGhyb3dzIGlmIHRoZSBub2RlJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZVR5cGUobm9kZSwgdHlwZSkge1xuICBpZiAoIW5vZGUgfHwgbm9kZS50eXBlICE9PSB0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlIFwiICsgdHlwZSArIFwiLCBidXQgZ290IFwiICsgKG5vZGUgPyBcIm5vZGUgb2YgdHlwZSBcIiArIG5vZGUudHlwZSA6IFN0cmluZyhub2RlKSkpO1xuICB9IC8vICRGbG93Rml4TWUsID49MC4xMjVcblxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0U3ltYm9sTm9kZVR5cGUobm9kZSkge1xuICB2YXIgdHlwZWROb2RlID0gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKTtcblxuICBpZiAoIXR5cGVkTm9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgXCIgKyAobm9kZSA/IFwibm9kZSBvZiB0eXBlIFwiICsgbm9kZS50eXBlIDogU3RyaW5nKG5vZGUpKSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWROb2RlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG1vcmUgc3RyaWN0bHkgdHlwZWQgaWZmIGl0IGlzIG9mIHRoZSBnaXZlbiB0eXBlLiBPdGhlcndpc2UsXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTeW1ib2xOb2RlVHlwZShub2RlKSB7XG4gIGlmIChub2RlICYmIChub2RlLnR5cGUgPT09IFwiYXRvbVwiIHx8IE5PTl9BVE9NUy5oYXNPd25Qcm9wZXJ0eShub2RlLnR5cGUpKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOT1RFOiBVbmxpa2UgbW9zdCBgaHRtbEJ1aWxkZXJgcywgdGhpcyBvbmUgaGFuZGxlcyBub3Qgb25seSBcImFjY2VudFwiLCBidXRcbi8vIGFsc28gXCJzdXBzdWJcIiBzaW5jZSBhbiBhY2NlbnQgY2FuIGFmZmVjdCBzdXBlci9zdWJzY3JpcHRpbmcuXG52YXIgaHRtbEJ1aWxkZXIkYSA9IChncnAsIG9wdGlvbnMpID0+IHtcbiAgLy8gQWNjZW50cyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLCBydWxlIDEyLlxuICB2YXIgYmFzZTtcbiAgdmFyIGdyb3VwO1xuICB2YXIgc3VwU3ViR3JvdXA7XG5cbiAgaWYgKGdycCAmJiBncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIG91ciBiYXNlIGlzIGEgY2hhcmFjdGVyIGJveCwgYW5kIHdlIGhhdmUgc3VwZXJzY3JpcHRzIGFuZFxuICAgIC8vIHN1YnNjcmlwdHMsIHRoZSBzdXBzdWIgd2lsbCBkZWZlciB0byB1cy4gSW4gcGFydGljdWxhciwgd2Ugd2FudFxuICAgIC8vIHRvIGF0dGFjaCB0aGUgc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIHRvIHRoZSBpbm5lciBib2R5IChzb1xuICAgIC8vIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgd29uJ3QgYmVcbiAgICAvLyBhZmZlY3RlZCBieSB0aGUgaGVpZ2h0IG9mIHRoZSBhY2NlbnQpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnlcbiAgICAvLyBzdGlja2luZyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGludG8gdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiwgYW5kXG4gICAgLy8gcmVuZGVyaW5nIHRoYXQsIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgdGhlIGFjY2VudCBpcy5cbiAgICAvLyBUaGUgcmVhbCBhY2NlbnQgZ3JvdXAgaXMgdGhlIGJhc2Ugb2YgdGhlIHN1cHN1YiBncm91cFxuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiYWNjZW50XCIpOyAvLyBUaGUgY2hhcmFjdGVyIGJveCBpcyB0aGUgYmFzZSBvZiB0aGUgYWNjZW50IGdyb3VwXG5cbiAgICBiYXNlID0gZ3JvdXAuYmFzZTsgLy8gU3RpY2sgdGhlIGNoYXJhY3RlciBib3ggaW50byB0aGUgYmFzZSBvZiB0aGUgc3Vwc3ViIGdyb3VwXG5cbiAgICBncnAuYmFzZSA9IGJhc2U7IC8vIFJlcmVuZGVyIHRoZSBzdXBzdWIgZ3JvdXAgd2l0aCBpdHMgbmV3IGJhc2UsIGFuZCBzdG9yZSB0aGF0XG4gICAgLy8gcmVzdWx0LlxuXG4gICAgc3VwU3ViR3JvdXAgPSBhc3NlcnRTcGFuKGJ1aWxkR3JvdXAkMShncnAsIG9wdGlvbnMpKTsgLy8gcmVzZXQgb3JpZ2luYWwgYmFzZVxuXG4gICAgZ3JwLmJhc2UgPSBncm91cDtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJhY2NlbnRcIik7XG4gICAgYmFzZSA9IGdyb3VwLmJhc2U7XG4gIH0gLy8gQnVpbGQgdGhlIGJhc2UgZ3JvdXBcblxuXG4gIHZhciBib2R5ID0gYnVpbGRHcm91cCQxKGJhc2UsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBEb2VzIHRoZSBhY2NlbnQgbmVlZCB0byBzaGlmdCBmb3IgdGhlIHNrZXcgb2YgYSBjaGFyYWN0ZXI/XG5cbiAgdmFyIG11c3RTaGlmdCA9IGdyb3VwLmlzU2hpZnR5ICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJhc2UpOyAvLyBDYWxjdWxhdGUgdGhlIHNrZXcgb2YgdGhlIGFjY2VudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgbGluZSBcIklmIHRoZVxuICAvLyBudWNsZXVzIGlzIG5vdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGxldCBzID0gMDsgb3RoZXJ3aXNlIHNldCBzIHRvIHRoZVxuICAvLyBrZXJuIGFtb3VudCBmb3IgdGhlIG51Y2xldXMgZm9sbG93ZWQgYnkgdGhlIFxcc2tld2NoYXIgb2YgaXRzIGZvbnQuXCJcbiAgLy8gTm90ZSB0aGF0IG91ciBza2V3IG1ldHJpY3MgYXJlIGp1c3QgdGhlIGtlcm4gYmV0d2VlbiBlYWNoIGNoYXJhY3RlclxuICAvLyBhbmQgdGhlIHNrZXdjaGFyLlxuXG4gIHZhciBza2V3ID0gMDtcblxuICBpZiAobXVzdFNoaWZ0KSB7XG4gICAgLy8gSWYgdGhlIGJhc2UgaXMgYSBjaGFyYWN0ZXIgYm94LCB0aGVuIHdlIHdhbnQgdGhlIHNrZXcgb2YgdGhlXG4gICAgLy8gaW5uZXJtb3N0IGNoYXJhY3Rlci4gVG8gZG8gdGhhdCwgd2UgZmluZCB0aGUgaW5uZXJtb3N0IGNoYXJhY3RlcjpcbiAgICB2YXIgYmFzZUNoYXIgPSB1dGlscy5nZXRCYXNlRWxlbShiYXNlKTsgLy8gVGhlbiwgd2UgcmVuZGVyIGl0cyBncm91cCB0byBnZXQgdGhlIHN5bWJvbCBpbnNpZGUgaXRcblxuICAgIHZhciBiYXNlR3JvdXAgPSBidWlsZEdyb3VwJDEoYmFzZUNoYXIsIG9wdGlvbnMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpOyAvLyBGaW5hbGx5LCB3ZSBwdWxsIHRoZSBza2V3IG9mZiBvZiB0aGUgc3ltYm9sLlxuXG4gICAgc2tldyA9IGFzc2VydFN5bWJvbERvbU5vZGUoYmFzZUdyb3VwKS5za2V3OyAvLyBOb3RlIHRoYXQgd2Ugbm93IHRocm93IGF3YXkgYmFzZUdyb3VwLCBiZWNhdXNlIHRoZSBsYXllcnMgd2VcbiAgICAvLyByZW1vdmVkIHdpdGggZ2V0QmFzZUVsZW0gbWlnaHQgY29udGFpbiB0aGluZ3MgbGlrZSBcXGNvbG9yIHdoaWNoXG4gICAgLy8gd2UgY2FuJ3QgZ2V0IHJpZCBvZi5cbiAgICAvLyBUT0RPKGVtaWx5KTogRmluZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBza2V3XG4gIH1cblxuICB2YXIgYWNjZW50QmVsb3cgPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcY1wiOyAvLyBjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCB0aGUgYWNjZW50XG5cbiAgdmFyIGNsZWFyYW5jZSA9IGFjY2VudEJlbG93ID8gYm9keS5oZWlnaHQgKyBib2R5LmRlcHRoIDogTWF0aC5taW4oYm9keS5oZWlnaHQsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTsgLy8gQnVpbGQgdGhlIGFjY2VudFxuXG4gIHZhciBhY2NlbnRCb2R5O1xuXG4gIGlmICghZ3JvdXAuaXNTdHJldGNoeSkge1xuICAgIHZhciBhY2NlbnQ7XG4gICAgdmFyIHdpZHRoO1xuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx2ZWNcIikge1xuICAgICAgLy8gQmVmb3JlIHZlcnNpb24gMC45LCBcXHZlYyB1c2VkIHRoZSBjb21iaW5pbmcgZm9udCBnbHlwaCBVKzIwRDcuXG4gICAgICAvLyBCdXQgYnJvd3NlcnMsIGVzcGVjaWFsbHkgU2FmYXJpLCBhcmUgbm90IGNvbnNpc3RlbnQgaW4gaG93IHRoZXlcbiAgICAgIC8vIHJlbmRlciBjb21iaW5pbmcgY2hhcmFjdGVycyB3aGVuIG5vdCBwcmVjZWRlZCBieSBhIGNoYXJhY3Rlci5cbiAgICAgIC8vIFNvIG5vdyB3ZSB1c2UgYW4gU1ZHLlxuICAgICAgLy8gSWYgU2FmYXJpIHJlZm9ybXMsIHdlIHNob3VsZCBjb25zaWRlciByZXZlcnRpbmcgdG8gdGhlIGdseXBoLlxuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKFwidmVjXCIsIG9wdGlvbnMpO1xuICAgICAgd2lkdGggPSBidWlsZENvbW1vbi5zdmdEYXRhLnZlY1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjZW50ID0gYnVpbGRDb21tb24ubWFrZU9yZCh7XG4gICAgICAgIG1vZGU6IGdyb3VwLm1vZGUsXG4gICAgICAgIHRleHQ6IGdyb3VwLmxhYmVsXG4gICAgICB9LCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICBhY2NlbnQgPSBhc3NlcnRTeW1ib2xEb21Ob2RlKGFjY2VudCk7IC8vIFJlbW92ZSB0aGUgaXRhbGljIGNvcnJlY3Rpb24gb2YgdGhlIGFjY2VudCwgYmVjYXVzZSBpdCBvbmx5IHNlcnZlcyB0b1xuICAgICAgLy8gc2hpZnQgdGhlIGFjY2VudCBvdmVyIHRvIGEgcGxhY2Ugd2UgZG9uJ3Qgd2FudC5cblxuICAgICAgYWNjZW50Lml0YWxpYyA9IDA7XG4gICAgICB3aWR0aCA9IGFjY2VudC53aWR0aDtcblxuICAgICAgaWYgKGFjY2VudEJlbG93KSB7XG4gICAgICAgIGNsZWFyYW5jZSArPSBhY2NlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImFjY2VudC1ib2R5XCJdLCBbYWNjZW50XSk7IC8vIFwiRnVsbFwiIGFjY2VudHMgZXhwYW5kIHRoZSB3aWR0aCBvZiB0aGUgcmVzdWx0aW5nIHN5bWJvbCB0byBiZVxuICAgIC8vIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgYWNjZW50LCBhbmQgb3ZlcmxhcCBkaXJlY3RseSBvbnRvIHRoZVxuICAgIC8vIGNoYXJhY3RlciB3aXRob3V0IGFueSB2ZXJ0aWNhbCBvZmZzZXQuXG5cbiAgICB2YXIgYWNjZW50RnVsbCA9IGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiO1xuXG4gICAgaWYgKGFjY2VudEZ1bGwpIHtcbiAgICAgIGFjY2VudEJvZHkuY2xhc3Nlcy5wdXNoKCdhY2NlbnQtZnVsbCcpO1xuICAgICAgY2xlYXJhbmNlID0gYm9keS5oZWlnaHQ7XG4gICAgfSAvLyBTaGlmdCB0aGUgYWNjZW50IG92ZXIgYnkgdGhlIHNrZXcuXG5cblxuICAgIHZhciBsZWZ0ID0gc2tldzsgLy8gQ1NTIGRlZmluZXMgYC5rYXRleCAuYWNjZW50IC5hY2NlbnQtYm9keTpub3QoLmFjY2VudC1mdWxsKSB7IHdpZHRoOiAwIH1gXG4gICAgLy8gc28gdGhhdCB0aGUgYWNjZW50IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgYm91bmRpbmcgYm94LlxuICAgIC8vIFdlIG5lZWQgdG8gc2hpZnQgdGhlIGNoYXJhY3RlciBieSBpdHMgd2lkdGggKGVmZmVjdGl2ZWx5IGhhbGZcbiAgICAvLyBpdHMgd2lkdGgpIHRvIGNvbXBlbnNhdGUuXG5cbiAgICBpZiAoIWFjY2VudEZ1bGwpIHtcbiAgICAgIGxlZnQgLT0gd2lkdGggLyAyO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkuc3R5bGUubGVmdCA9IG1ha2VFbShsZWZ0KTsgLy8gXFx0ZXh0Y2lyY2xlZCB1c2VzIHRoZSBcXGJpZ2NpcmMgZ2x5cGgsIHNvIGl0IG5lZWRzIHNvbWVcbiAgICAvLyB2ZXJ0aWNhbCBhZGp1c3RtZW50IHRvIG1hdGNoIExhVGVYLlxuXG4gICAgaWYgKGdyb3VwLmxhYmVsID09PSBcIlxcXFx0ZXh0Y2lyY2xlZFwiKSB7XG4gICAgICBhY2NlbnRCb2R5LnN0eWxlLnRvcCA9IFwiLjJlbVwiO1xuICAgIH1cblxuICAgIGFjY2VudEJvZHkgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLWNsZWFyYW5jZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogYWNjZW50Qm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgYWNjZW50Qm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBhY2NlbnRCb2R5LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogW1wic3ZnLWFsaWduXCJdLFxuICAgICAgICB3cmFwcGVyU3R5bGU6IHNrZXcgPiAwID8ge1xuICAgICAgICAgIHdpZHRoOiBcImNhbGMoMTAwJSAtIFwiICsgbWFrZUVtKDIgKiBza2V3KSArIFwiKVwiLFxuICAgICAgICAgIG1hcmdpbkxlZnQ6IG1ha2VFbSgyICogc2tldylcbiAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHZhciBhY2NlbnRXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcImFjY2VudFwiXSwgW2FjY2VudEJvZHldLCBvcHRpb25zKTtcblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBIZXJlLCB3ZSByZXBsYWNlIHRoZSBcImJhc2VcIiBjaGlsZCBvZiB0aGUgc3Vwc3ViIHdpdGggb3VyIG5ld2x5XG4gICAgLy8gZ2VuZXJhdGVkIGFjY2VudC5cbiAgICBzdXBTdWJHcm91cC5jaGlsZHJlblswXSA9IGFjY2VudFdyYXA7IC8vIFNpbmNlIHdlIGRvbid0IHJlcnVuIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gYWZ0ZXIgcmVwbGFjaW5nIHRoZVxuICAgIC8vIGFjY2VudCwgd2UgbWFudWFsbHkgcmVjYWxjdWxhdGUgaGVpZ2h0LlxuXG4gICAgc3VwU3ViR3JvdXAuaGVpZ2h0ID0gTWF0aC5tYXgoYWNjZW50V3JhcC5oZWlnaHQsIHN1cFN1Ykdyb3VwLmhlaWdodCk7IC8vIEFjY2VudHMgc2hvdWxkIGFsd2F5cyBiZSBvcmRzLCBldmVuIHdoZW4gdGhlaXIgaW5uYXJkcyBhcmUgbm90LlxuXG4gICAgc3VwU3ViR3JvdXAuY2xhc3Nlc1swXSA9IFwibW9yZFwiO1xuICAgIHJldHVybiBzdXBTdWJHcm91cDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYWNjZW50V3JhcDtcbiAgfVxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkOSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IGdyb3VwLmlzU3RyZXRjaHkgPyBzdHJldGNoeS5tYXRoTUxub2RlKGdyb3VwLmxhYmVsKSA6IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW21ha2VUZXh0KGdyb3VwLmxhYmVsLCBncm91cC5tb2RlKV0pO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYID0gbmV3IFJlZ0V4cChbXCJcXFxcYWN1dGVcIiwgXCJcXFxcZ3JhdmVcIiwgXCJcXFxcZGRvdFwiLCBcIlxcXFx0aWxkZVwiLCBcIlxcXFxiYXJcIiwgXCJcXFxcYnJldmVcIiwgXCJcXFxcY2hlY2tcIiwgXCJcXFxcaGF0XCIsIFwiXFxcXHZlY1wiLCBcIlxcXFxkb3RcIiwgXCJcXFxcbWF0aHJpbmdcIl0ubWFwKGFjY2VudCA9PiBcIlxcXFxcIiArIGFjY2VudCkuam9pbihcInxcIikpOyAvLyBBY2NlbnRzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJhY2NlbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxhY3V0ZVwiLCBcIlxcXFxncmF2ZVwiLCBcIlxcXFxkZG90XCIsIFwiXFxcXHRpbGRlXCIsIFwiXFxcXGJhclwiLCBcIlxcXFxicmV2ZVwiLCBcIlxcXFxjaGVja1wiLCBcIlxcXFxoYXRcIiwgXCJcXFxcdmVjXCIsIFwiXFxcXGRvdFwiLCBcIlxcXFxtYXRocmluZ1wiLCBcIlxcXFx3aWRlY2hlY2tcIiwgXCJcXFxcd2lkZWhhdFwiLCBcIlxcXFx3aWRldGlsZGVcIiwgXCJcXFxcb3ZlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcb3ZlcmxlZnRhcnJvd1wiLCBcIlxcXFxPdmVycmlnaHRhcnJvd1wiLCBcIlxcXFxvdmVybGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxcb3Zlcmdyb3VwXCIsIFwiXFxcXG92ZXJsaW5lc2VnbWVudFwiLCBcIlxcXFxvdmVybGVmdGhhcnBvb25cIiwgXCJcXFxcb3ZlcnJpZ2h0aGFycG9vblwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGJhc2UgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgaXNTdHJldGNoeSA9ICFOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYLnRlc3QoY29udGV4dC5mdW5jTmFtZSk7XG4gICAgdmFyIGlzU2hpZnR5ID0gIWlzU3RyZXRjaHkgfHwgY29udGV4dC5mdW5jTmFtZSA9PT0gXCJcXFxcd2lkZWhhdFwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGV0aWxkZVwiIHx8IGNvbnRleHQuZnVuY05hbWUgPT09IFwiXFxcXHdpZGVjaGVja1wiO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImFjY2VudFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGxhYmVsOiBjb250ZXh0LmZ1bmNOYW1lLFxuICAgICAgaXNTdHJldGNoeTogaXNTdHJldGNoeSxcbiAgICAgIGlzU2hpZnR5OiBpc1NoaWZ0eSxcbiAgICAgIGJhc2U6IGJhc2VcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkYSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ5XG59KTsgLy8gVGV4dC1tb2RlIGFjY2VudHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImFjY2VudFwiLFxuICBuYW1lczogW1wiXFxcXCdcIiwgXCJcXFxcYFwiLCBcIlxcXFxeXCIsIFwiXFxcXH5cIiwgXCJcXFxcPVwiLCBcIlxcXFx1XCIsIFwiXFxcXC5cIiwgJ1xcXFxcIicsIFwiXFxcXGNcIiwgXCJcXFxcclwiLCBcIlxcXFxIXCIsIFwiXFxcXHZcIiwgXCJcXFxcdGV4dGNpcmNsZWRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IHRydWUsXG4gICAgLy8gdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgYXJnVHlwZXM6IFtcInByaW1pdGl2ZVwiXVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBiYXNlID0gYXJnc1swXTtcbiAgICB2YXIgbW9kZSA9IGNvbnRleHQucGFyc2VyLm1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgIGNvbnRleHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRBY2NlbnRzXCIsIFwiTGFUZVgncyBhY2NlbnQgXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCIgd29ya3Mgb25seSBpbiB0ZXh0IG1vZGVcIik7XG4gICAgICBtb2RlID0gXCJ0ZXh0XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICBtb2RlOiBtb2RlLFxuICAgICAgbGFiZWw6IGNvbnRleHQuZnVuY05hbWUsXG4gICAgICBpc1N0cmV0Y2h5OiBmYWxzZSxcbiAgICAgIGlzU2hpZnR5OiB0cnVlLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciRhLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDlcbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgbmFtZXM6IFtcIlxcXFx1bmRlcmxlZnRhcnJvd1wiLCBcIlxcXFx1bmRlcnJpZ2h0YXJyb3dcIiwgXCJcXFxcdW5kZXJsZWZ0cmlnaHRhcnJvd1wiLCBcIlxcXFx1bmRlcmdyb3VwXCIsIFwiXFxcXHVuZGVybGluZXNlZ21lbnRcIiwgXCJcXFxcdXRpbGRlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgYmFzZSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiYWNjZW50VW5kZXJcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFzZTogYmFzZVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBUcmVhdCB1bmRlciBhY2NlbnRzIG11Y2ggbGlrZSB1bmRlcmxpbmVzLlxuICAgIHZhciBpbm5lckdyb3VwID0gYnVpbGRHcm91cCQxKGdyb3VwLmJhc2UsIG9wdGlvbnMpO1xuICAgIHZhciBhY2NlbnRCb2R5ID0gc3RyZXRjaHkuc3ZnU3Bhbihncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGtlcm4gPSBncm91cC5sYWJlbCA9PT0gXCJcXFxcdXRpbGRlXCIgPyAwLjEyIDogMDsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJ0b3BcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogaW5uZXJHcm91cC5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGFjY2VudEJvZHksXG4gICAgICAgIHdyYXBwZXJDbGFzc2VzOiBbXCJzdmctYWxpZ25cIl1cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IGtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJhY2NlbnR1bmRlclwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBhY2NlbnROb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm11bmRlclwiLCBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKSwgYWNjZW50Tm9kZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiYWNjZW50dW5kZXJcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uXG52YXIgcGFkZGVkTm9kZSA9IGdyb3VwID0+IHtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgZ3JvdXAgPyBbZ3JvdXBdIDogW10pO1xuICBub2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiKzAuNmVtXCIpO1xuICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIjAuM2VtXCIpO1xuICByZXR1cm4gbm9kZTtcbn07IC8vIFN0cmV0Y2h5IGFycm93cyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50XG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInhBcnJvd1wiLFxuICBuYW1lczogW1wiXFxcXHhsZWZ0YXJyb3dcIiwgXCJcXFxceHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRhcnJvd1wiLCBcIlxcXFx4UmlnaHRhcnJvd1wiLCBcIlxcXFx4bGVmdHJpZ2h0YXJyb3dcIiwgXCJcXFxceExlZnRyaWdodGFycm93XCIsIFwiXFxcXHhob29rbGVmdGFycm93XCIsIFwiXFxcXHhob29rcmlnaHRhcnJvd1wiLCBcIlxcXFx4bWFwc3RvXCIsIFwiXFxcXHhyaWdodGhhcnBvb25kb3duXCIsIFwiXFxcXHhyaWdodGhhcnBvb251cFwiLCBcIlxcXFx4bGVmdGhhcnBvb25kb3duXCIsIFwiXFxcXHhsZWZ0aGFycG9vbnVwXCIsIFwiXFxcXHhyaWdodGxlZnRoYXJwb29uc1wiLCBcIlxcXFx4bGVmdHJpZ2h0aGFycG9vbnNcIiwgXCJcXFxceGxvbmdlcXVhbFwiLCBcIlxcXFx4dHdvaGVhZHJpZ2h0YXJyb3dcIiwgXCJcXFxceHR3b2hlYWRsZWZ0YXJyb3dcIiwgXCJcXFxceHRvZnJvbVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSB0byBzdXBwb3J0IHRoZSBtaGNoZW0gZXh0ZW5zaW9uLlxuICAvLyBEaXJlY3QgdXNlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXNjb3VyYWdlZCBhbmQgbWF5IGJyZWFrIHNvbWVkYXkuXG4gIFwiXFxcXHhyaWdodGxlZnRhcnJvd3NcIiwgXCJcXFxceHJpZ2h0ZXF1aWxpYnJpdW1cIiwgXCJcXFxceGxlZnRlcXVpbGlicml1bVwiLCAvLyBUaGUgbmV4dCAzIGZ1bmN0aW9ucyBhcmUgaGVyZSBvbmx5IHRvIHN1cHBvcnQgdGhlIHtDRH0gZW52aXJvbm1lbnQuXG4gIFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIiwgXCJcXFxcXFxcXGNkbGVmdGFycm93XCIsIFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInhBcnJvd1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBib2R5OiBhcmdzWzBdLFxuICAgICAgYmVsb3c6IG9wdEFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIC8vIEZsb3cgaXMgdW5hYmxlIHRvIGNvcnJlY3RseSBpbmZlciB0aGUgdHlwZSBvZiBgZ3JvdXBgLCBldmVuIHRob3VnaCBpdCdzXG4gIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwYXNzZWQtaW4gYHR5cGVgIGFib3ZlLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7IC8vIEJ1aWxkIHRoZSBhcmd1bWVudCBncm91cHMgaW4gdGhlIGFwcHJvcHJpYXRlIHN0eWxlLlxuICAgIC8vIFJlZjogYW1zbWF0aC5kdHg6ICAgXFxoYm94eyRcXHNjcmlwdHN0eWxlXFxta2VybiMzbXV7IzZ9XFxta2VybiM0bXUkfSVcbiAgICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKTtcbiAgICB2YXIgdXBwZXJHcm91cCA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIHZhciBhcnJvd1ByZWZpeCA9IGdyb3VwLmxhYmVsLnNsaWNlKDAsIDIpID09PSBcIlxcXFx4XCIgPyBcInhcIiA6IFwiY2RcIjtcbiAgICB1cHBlckdyb3VwLmNsYXNzZXMucHVzaChhcnJvd1ByZWZpeCArIFwiLWFycm93LXBhZFwiKTtcbiAgICB2YXIgbG93ZXJHcm91cDtcblxuICAgIGlmIChncm91cC5iZWxvdykge1xuICAgICAgLy8gQnVpbGQgdGhlIGxvd2VyIGdyb3VwXG4gICAgICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSk7XG4gICAgICBsb3dlckdyb3VwID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5iZWxvdywgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgbG93ZXJHcm91cC5jbGFzc2VzLnB1c2goYXJyb3dQcmVmaXggKyBcIi1hcnJvdy1wYWRcIik7XG4gICAgfVxuXG4gICAgdmFyIGFycm93Qm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBSZSBzaGlmdDogTm90ZSB0aGF0IHN0cmV0Y2h5LnN2Z1NwYW4gcmV0dXJuZWQgYXJyb3dCb2R5LmRlcHRoID0gMC5cbiAgICAvLyBUaGUgcG9pbnQgd2Ugd2FudCBvbiB0aGUgbWF0aCBheGlzIGlzIGF0IDAuNSAqIGFycm93Qm9keS5oZWlnaHQuXG5cbiAgICB2YXIgYXJyb3dTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCArIDAuNSAqIGFycm93Qm9keS5oZWlnaHQ7IC8vIDIgbXUga2Vybi4gUmVmOiBhbXNtYXRoLmR0eDogIzdcXGlmMCMyXFxlbHNlXFxta2VybiMybXVcXGZpXG5cbiAgICB2YXIgdXBwZXJTaGlmdCA9IC1vcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCAtIDAuNSAqIGFycm93Qm9keS5oZWlnaHQgLSAwLjExMTsgLy8gMC4xMTEgZW0gPSAyIG11XG5cbiAgICBpZiAodXBwZXJHcm91cC5kZXB0aCA+IDAuMjUgfHwgZ3JvdXAubGFiZWwgPT09IFwiXFxcXHhsZWZ0ZXF1aWxpYnJpdW1cIikge1xuICAgICAgdXBwZXJTaGlmdCAtPSB1cHBlckdyb3VwLmRlcHRoOyAvLyBzaGlmdCB1cCBpZiBkZXB0aCBlbmNyb2FjaGVzXG4gICAgfSAvLyBHZW5lcmF0ZSB0aGUgdmxpc3RcblxuXG4gICAgdmFyIHZsaXN0O1xuXG4gICAgaWYgKGxvd2VyR3JvdXApIHtcbiAgICAgIHZhciBsb3dlclNoaWZ0ID0gLW9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICsgbG93ZXJHcm91cC5oZWlnaHQgKyAwLjUgKiBhcnJvd0JvZHkuaGVpZ2h0ICsgMC4xMTE7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdXBwZXJHcm91cCxcbiAgICAgICAgICBzaGlmdDogdXBwZXJTaGlmdFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogYXJyb3dCb2R5LFxuICAgICAgICAgIHNoaWZ0OiBhcnJvd1NoaWZ0XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsb3dlckdyb3VwLFxuICAgICAgICAgIHNoaWZ0OiBsb3dlclNoaWZ0XG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmxpc3QgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHVwcGVyR3JvdXAsXG4gICAgICAgICAgc2hpZnQ6IHVwcGVyU2hpZnRcbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGFycm93Qm9keSxcbiAgICAgICAgICBzaGlmdDogYXJyb3dTaGlmdFxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cblxuICAgIHZsaXN0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaChcInN2Zy1hbGlnblwiKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXJlbFwiLCBcIngtYXJyb3dcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgYXJyb3dOb2RlID0gc3RyZXRjaHkubWF0aE1Mbm9kZShncm91cC5sYWJlbCk7XG4gICAgYXJyb3dOb2RlLnNldEF0dHJpYnV0ZShcIm1pbnNpemVcIiwgZ3JvdXAubGFiZWwuY2hhckF0KDApID09PSBcInhcIiA/IFwiMS43NWVtXCIgOiBcIjMuMGVtXCIpO1xuICAgIHZhciBub2RlO1xuXG4gICAgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAgIHZhciB1cHBlck5vZGUgPSBwYWRkZWROb2RlKGJ1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuXG4gICAgICBpZiAoZ3JvdXAuYmVsb3cpIHtcbiAgICAgICAgdmFyIGxvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJvdmVyXCIsIFthcnJvd05vZGUsIGxvd2VyTm9kZSwgdXBwZXJOb2RlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb3ZlclwiLCBbYXJyb3dOb2RlLCB1cHBlck5vZGVdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdyb3VwLmJlbG93KSB7XG4gICAgICB2YXIgX2xvd2VyTm9kZSA9IHBhZGRlZE5vZGUoYnVpbGRHcm91cChncm91cC5iZWxvdywgb3B0aW9ucykpO1xuXG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2Fycm93Tm9kZSwgX2xvd2VyTm9kZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAvLyBQYXJzZXIuanMgdGhyb3dzIGFuIGVycm9yIGlmIHRoZXJlIGlzIG5vIGFyZ3VtZW50LlxuICAgICAgbm9kZSA9IHBhZGRlZE5vZGUoKTtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vdmVyXCIsIFthcnJvd05vZGUsIG5vZGVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxudmFyIG1ha2VTcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW47XG5cbmZ1bmN0aW9uIGh0bWxCdWlsZGVyJDkoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG4gIHJldHVybiBtYWtlU3BhbihbZ3JvdXAubWNsYXNzXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXRobWxCdWlsZGVyJDgoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIG5vZGU7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBpbm5lcik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcmRcIikge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtaVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBpbm5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncm91cC5pc0NoYXJhY3RlckJveCkge1xuICAgICAgbm9kZSA9IGlubmVyWzBdO1xuICAgICAgbm9kZS50eXBlID0gXCJtb1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBpbm5lcik7XG4gICAgfSAvLyBTZXQgc3BhY2luZyBiYXNlZCBvbiB3aGF0IGlzIHRoZSBtb3N0IGxpa2VseSBhZGphY2VudCBhdG9tIHR5cGUuXG4gICAgLy8gU2VlIFRlWGJvb2sgcDE3MC5cblxuXG4gICAgaWYgKGdyb3VwLm1jbGFzcyA9PT0gXCJtYmluXCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjAuMjJlbVwiOyAvLyBtZWRpdW0gc3BhY2VcblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4yMmVtXCI7XG4gICAgfSBlbHNlIGlmIChncm91cC5tY2xhc3MgPT09IFwibXB1bmN0XCIpIHtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5sc3BhY2UgPSBcIjBlbVwiO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzLnJzcGFjZSA9IFwiMC4xN2VtXCI7IC8vIHRoaW5zcGFjZVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwZW1cIjtcbiAgICAgIG5vZGUuYXR0cmlidXRlcy5yc3BhY2UgPSBcIjBlbVwiO1xuICAgIH0gZWxzZSBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1pbm5lclwiKSB7XG4gICAgICBub2RlLmF0dHJpYnV0ZXMubHNwYWNlID0gXCIwLjA1NTZlbVwiOyAvLyAxIG11IGlzIHRoZSBtb3N0IGxpa2VseSBvcHRpb25cblxuICAgICAgbm9kZS5hdHRyaWJ1dGVzLndpZHRoID0gXCIrMC4xMTExZW1cIjtcbiAgICB9IC8vIE1hdGhNTCA8bW8+IGRlZmF1bHQgc3BhY2UgaXMgNS8xOCBlbSwgc28gPG1yZWw+IG5lZWRzIG5vIGFjdGlvbi5cbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL01hdGhNTC9FbGVtZW50L21vXG5cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSAvLyBNYXRoIGNsYXNzIGNvbW1hbmRzIGV4Y2VwdCBcXG1hdGhvcFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRob3JkXCIsIFwiXFxcXG1hdGhiaW5cIiwgXCJcXFxcbWF0aHJlbFwiLCBcIlxcXFxtYXRob3BlblwiLCBcIlxcXFxtYXRoY2xvc2VcIiwgXCJcXFxcbWF0aHB1bmN0XCIsIFwiXFxcXG1hdGhpbm5lclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBcIm1cIiArIGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgLy8gVE9ETyhrZXZpbmIpOiBkb24ndCBwcmVmaXggd2l0aCAnbSdcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGJvZHkpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcbnZhciBiaW5yZWxDbGFzcyA9IGFyZyA9PiB7XG4gIC8vIFxcYmlucmVsQCBzcGFjaW5nIHZhcmllcyB3aXRoIChiaW58cmVsfG9yZCkgb2YgdGhlIGF0b20gaW4gdGhlIGFyZ3VtZW50LlxuICAvLyAoYnkgcmVuZGVyaW5nIHNlcGFyYXRlbHkgYW5kIHdpdGgge31zIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZCBtZWFzdXJpbmdcbiAgLy8gdGhlIGNoYW5nZSBpbiBzcGFjaW5nKS4gIFdlJ2xsIGRvIHJvdWdobHkgdGhlIHNhbWUgYnkgZGV0ZWN0aW5nIHRoZVxuICAvLyBhdG9tIHR5cGUgZGlyZWN0bHkuXG4gIHZhciBhdG9tID0gYXJnLnR5cGUgPT09IFwib3JkZ3JvdXBcIiAmJiBhcmcuYm9keS5sZW5ndGggPyBhcmcuYm9keVswXSA6IGFyZztcblxuICBpZiAoYXRvbS50eXBlID09PSBcImF0b21cIiAmJiAoYXRvbS5mYW1pbHkgPT09IFwiYmluXCIgfHwgYXRvbS5mYW1pbHkgPT09IFwicmVsXCIpKSB7XG4gICAgcmV0dXJuIFwibVwiICsgYXRvbS5mYW1pbHk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibW9yZFwiO1xuICB9XG59OyAvLyBcXEBiaW5yZWx7eH17eX0gcmVuZGVycyBsaWtlIHkgYnV0IGFzIG1iaW4vbXJlbC9tb3JkIGlmIHggaXMgbWJpbi9tcmVsL21vcmQuXG4vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXFxiaW5yZWxAe3h9XFxiaW5yZWxAQHt5fSBpbiBBTVNUZVguXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJtY2xhc3NcIixcbiAgbmFtZXM6IFtcIlxcXFxAYmlucmVsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDJcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtY2xhc3NcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbWNsYXNzOiBiaW5yZWxDbGFzcyhhcmdzWzBdKSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMV0pLFxuICAgICAgaXNDaGFyYWN0ZXJCb3g6IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGFyZ3NbMV0pXG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQnVpbGQgYSByZWxhdGlvbiBvciBzdGFja2VkIG9wIGJ5IHBsYWNpbmcgb25lIHN5bWJvbCBvbiB0b3Agb2YgYW5vdGhlclxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibWNsYXNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcc3RhY2tyZWxcIiwgXCJcXFxcb3ZlcnNldFwiLCBcIlxcXFx1bmRlcnNldFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMywgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYmFzZUFyZyA9IGFyZ3NbMV07XG4gICAgdmFyIHNoaWZ0ZWRBcmcgPSBhcmdzWzBdO1xuICAgIHZhciBtY2xhc3M7XG5cbiAgICBpZiAoZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIpIHtcbiAgICAgIC8vIExhVGVYIGFwcGxpZXMgXFxiaW5yZWwgc3BhY2luZyB0byBcXG92ZXJzZXQgYW5kIFxcdW5kZXJzZXQuXG4gICAgICBtY2xhc3MgPSBiaW5yZWxDbGFzcyhiYXNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWNsYXNzID0gXCJtcmVsXCI7IC8vIGZvciBcXHN0YWNrcmVsXG4gICAgfVxuXG4gICAgdmFyIGJhc2VPcCA9IHtcbiAgICAgIHR5cGU6IFwib3BcIixcbiAgICAgIG1vZGU6IGJhc2VBcmcubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIGFsd2F5c0hhbmRsZVN1cFN1YjogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0Jhc2VTaGlmdDogZnVuY05hbWUgIT09IFwiXFxcXHN0YWNrcmVsXCIsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChiYXNlQXJnKVxuICAgIH07XG4gICAgdmFyIHN1cHN1YiA9IHtcbiAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICBtb2RlOiBzaGlmdGVkQXJnLm1vZGUsXG4gICAgICBiYXNlOiBiYXNlT3AsXG4gICAgICBzdXA6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gbnVsbCA6IHNoaWZ0ZWRBcmcsXG4gICAgICBzdWI6IGZ1bmNOYW1lID09PSBcIlxcXFx1bmRlcnNldFwiID8gc2hpZnRlZEFyZyA6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1jbGFzc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBtY2xhc3MsXG4gICAgICBib2R5OiBbc3Vwc3ViXSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiB1dGlscy5pc0NoYXJhY3RlckJveChzdXBzdWIpXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkOSxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ4XG59KTtcblxuLy8gXFxwbWIgaXMgYSBzaW11bGF0aW9uIG9mIGJvbGQgZm9udC5cbi8vIFRoZSB2ZXJzaW9uIG9mIFxccG1iIGluIGFtYnN5LnN0eSB3b3JrcyBieSB0eXBlc2V0dGluZyB0aHJlZSBjb3BpZXNcbi8vIHdpdGggc21hbGwgb2Zmc2V0cy4gV2UgdXNlIENTUyB0ZXh0LXNoYWRvdy5cbi8vIEl0J3MgYSBoYWNrLiBOb3QgYXMgZ29vZCBhcyBhIHJlYWwgYm9sZCBmb250LiBCZXR0ZXIgdGhhbiBub3RoaW5nLlxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInBtYlwiLFxuICBuYW1lczogW1wiXFxcXHBtYlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicG1iXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYXJnc1swXSksXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChhcmdzWzBdKVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCB0cnVlKTtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdLCBlbGVtZW50cywgb3B0aW9ucyk7XG4gICAgbm9kZS5zdHlsZS50ZXh0U2hhZG93ID0gXCIwLjAyZW0gMC4wMWVtIDAuMDRweFwiO1xuICAgIHJldHVybiBub2RlO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIHN0eWxlKSB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIHN0eWxlKTsgLy8gV3JhcCB3aXRoIGFuIDxtc3R5bGU+IGVsZW1lbnQuXG5cbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4XCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY2RBcnJvd0Z1bmN0aW9uTmFtZSA9IHtcbiAgXCI+XCI6IFwiXFxcXFxcXFxjZHJpZ2h0YXJyb3dcIixcbiAgXCI8XCI6IFwiXFxcXFxcXFxjZGxlZnRhcnJvd1wiLFxuICBcIj1cIjogXCJcXFxcXFxcXGNkbG9uZ2VxdWFsXCIsXG4gIFwiQVwiOiBcIlxcXFx1cGFycm93XCIsXG4gIFwiVlwiOiBcIlxcXFxkb3duYXJyb3dcIixcbiAgXCJ8XCI6IFwiXFxcXFZlcnRcIixcbiAgXCIuXCI6IFwibm8gYXJyb3dcIlxufTtcblxudmFyIG5ld0NlbGwgPSAoKSA9PiB7XG4gIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsLCB0byBiZSBmaWxsZWQgYmVsb3cgd2l0aCBwYXJzZSBub2Rlcy5cbiAgLy8gVGhlIHBhcnNlVHJlZSBmcm9tIHRoaXMgbW9kdWxlIG11c3QgYmUgY29uc3RydWN0ZWQgbGlrZSB0aGVcbiAgLy8gb25lIGNyZWF0ZWQgYnkgcGFyc2VBcnJheSgpLCBzbyBhbiBlbXB0eSBDRCBjZWxsIG11c3RcbiAgLy8gYmUgYSBQYXJzZU5vZGU8XCJzdHlsaW5nXCI+LiBBbmQgQ0QgaXMgYWx3YXlzIGRpc3BsYXlzdHlsZS5cbiAgLy8gU28gdGhlc2UgdmFsdWVzIGFyZSBmaXhlZCBhbmQgZmxvdyBjYW4gZG8gaW1wbGljaXQgdHlwaW5nLlxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgIGJvZHk6IFtdLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIHN0eWxlOiBcImRpc3BsYXlcIlxuICB9O1xufTtcblxudmFyIGlzU3RhcnRPZkFycm93ID0gbm9kZSA9PiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09IFwidGV4dG9yZFwiICYmIG5vZGUudGV4dCA9PT0gXCJAXCI7XG59O1xuXG52YXIgaXNMYWJlbEVuZCA9IChub2RlLCBlbmRDaGFyKSA9PiB7XG4gIHJldHVybiAobm9kZS50eXBlID09PSBcIm1hdGhvcmRcIiB8fCBub2RlLnR5cGUgPT09IFwiYXRvbVwiKSAmJiBub2RlLnRleHQgPT09IGVuZENoYXI7XG59O1xuXG5mdW5jdGlvbiBjZEFycm93KGFycm93Q2hhciwgbGFiZWxzLCBwYXJzZXIpIHtcbiAgLy8gUmV0dXJuIGEgcGFyc2UgdHJlZSBvZiBhbiBhcnJvdyBhbmQgaXRzIGxhYmVscy5cbiAgLy8gVGhpcyBhY3RzIGluIGEgd2F5IHNpbWlsYXIgdG8gYSBtYWNybyBleHBhbnNpb24uXG4gIHZhciBmdW5jTmFtZSA9IGNkQXJyb3dGdW5jdGlvbk5hbWVbYXJyb3dDaGFyXTtcblxuICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RyaWdodGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxcXFxcY2RsZWZ0YXJyb3dcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbGFiZWxzWzBdXSwgW2xhYmVsc1sxXV0pO1xuXG4gICAgY2FzZSBcIlxcXFx1cGFycm93XCI6XG4gICAgY2FzZSBcIlxcXFxkb3duYXJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgdmFyIGxlZnRMYWJlbCA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkbGVmdFwiLCBbbGFiZWxzWzBdXSwgW10pO1xuICAgICAgICB2YXIgYmFyZUFycm93ID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIHRleHQ6IGZ1bmNOYW1lLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGZhbWlseTogXCJyZWxcIlxuICAgICAgICB9O1xuICAgICAgICB2YXIgc2l6ZWRBcnJvdyA9IHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFtiYXJlQXJyb3ddLCBbXSk7XG4gICAgICAgIHZhciByaWdodExhYmVsID0gcGFyc2VyLmNhbGxGdW5jdGlvbihcIlxcXFxcXFxcY2RyaWdodFwiLCBbbGFiZWxzWzFdXSwgW10pO1xuICAgICAgICB2YXIgYXJyb3dHcm91cCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW2xlZnRMYWJlbCwgc2l6ZWRBcnJvdywgcmlnaHRMYWJlbF1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcXFxcXGNkcGFyZW50XCIsIFthcnJvd0dyb3VwXSwgW10pO1xuICAgICAgfVxuXG4gICAgY2FzZSBcIlxcXFxcXFxcY2Rsb25nZXF1YWxcIjpcbiAgICAgIHJldHVybiBwYXJzZXIuY2FsbEZ1bmN0aW9uKFwiXFxcXFxcXFxjZGxvbmdlcXVhbFwiLCBbXSwgW10pO1xuXG4gICAgY2FzZSBcIlxcXFxWZXJ0XCI6XG4gICAgICB7XG4gICAgICAgIHZhciBhcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICB0ZXh0OiBcIlxcXFxWZXJ0XCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsRnVuY3Rpb24oXCJcXFxcQmlnXCIsIFthcnJvd10sIFtdKTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgdGV4dDogXCIgXCIsXG4gICAgICAgIG1vZGU6IFwibWF0aFwiXG4gICAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ0QocGFyc2VyKSB7XG4gIC8vIEdldCB0aGUgYXJyYXkncyBwYXJzZSBub2RlcyB3aXRoIFxcXFwgdGVtcG9yYXJpbHkgbWFwcGVkIHRvIFxcY3IuXG4gIHZhciBwYXJzZWRSb3dzID0gW107XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3JcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTtcbiAgcGFyc2VyLmd1bGxldC5iZWdpbkdyb3VwKCk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIC8vIEdldCB0aGUgcGFyc2Ugbm9kZXMgZm9yIHRoZSBuZXh0IHJvdy5cbiAgICBwYXJzZWRSb3dzLnB1c2gocGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgXCJcXFxcXFxcXFwiKSk7XG4gICAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpO1xuICAgIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIiB8fCBuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgaWYgKHBhcnNlZFJvd3NbcGFyc2VkUm93cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFyc2VkUm93cy5wb3AoKTsgLy8gZmluYWwgcm93IGVuZGVkIGluIFxcXFxcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgXFxcXFxcXFwgb3IgXFxcXGNyIG9yIFxcXFxlbmRcIiwgcGFyc2VyLm5leHRUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddOyAvLyBMb29wIHRocnUgdGhlIHBhcnNlIG5vZGVzLiBDb2xsZWN0IHRoZW0gaW50byBjZWxscyBhbmQgYXJyb3dzLlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VkUm93cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0YXJ0IGEgbmV3IHJvdy5cbiAgICB2YXIgcm93Tm9kZXMgPSBwYXJzZWRSb3dzW2ldOyAvLyBDcmVhdGUgdGhlIGZpcnN0IGNlbGwuXG5cbiAgICB2YXIgY2VsbCA9IG5ld0NlbGwoKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Tm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmICghaXNTdGFydE9mQXJyb3cocm93Tm9kZXNbal0pKSB7XG4gICAgICAgIC8vIElmIGEgcGFyc2VOb2RlIGlzIG5vdCBhbiBhcnJvdywgaXQgZ29lcyBpbnRvIGEgY2VsbC5cbiAgICAgICAgY2VsbC5ib2R5LnB1c2gocm93Tm9kZXNbal0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUGFyc2Ugbm9kZSBqIGlzIGFuIFwiQFwiLCB0aGUgc3RhcnQgb2YgYW4gYXJyb3cuXG4gICAgICAgIC8vIEJlZm9yZSBzdGFydGluZyBvbiB0aGUgYXJyb3csIHB1c2ggdGhlIGNlbGwgaW50byBgcm93YC5cbiAgICAgICAgcm93LnB1c2goY2VsbCk7IC8vIE5vdyBjb2xsZWN0IHBhcnNlTm9kZXMgaW50byBhbiBhcnJvdy5cbiAgICAgICAgLy8gVGhlIGNoYXJhY3RlciBhZnRlciBcIkBcIiBkZWZpbmVzIHRoZSBhcnJvdyB0eXBlLlxuXG4gICAgICAgIGogKz0gMTtcbiAgICAgICAgdmFyIGFycm93Q2hhciA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKHJvd05vZGVzW2pdKS50ZXh0OyAvLyBDcmVhdGUgdHdvIGVtcHR5IGxhYmVsIG5vZGVzLiBXZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhlbS5cblxuICAgICAgICB2YXIgbGFiZWxzID0gbmV3IEFycmF5KDIpO1xuICAgICAgICBsYWJlbHNbMF0gPSB7XG4gICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIGJvZHk6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxhYmVsc1sxXSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfTsgLy8gUHJvY2VzcyB0aGUgYXJyb3cuXG5cbiAgICAgICAgaWYgKFwiPXwuXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIDsgZWxzZSBpZiAoXCI8PkFWXCIuaW5kZXhPZihhcnJvd0NoYXIpID4gLTEpIHtcbiAgICAgICAgICAvLyBGb3VyIGFycm93cywgYEA+Pj5gLCBgQDw8PGAsIGBAQUFBYCwgYW5kIGBAVlZWYCwgZWFjaCB0YWtlXG4gICAgICAgICAgLy8gdHdvIG9wdGlvbmFsIGxhYmVscy4gRS5nLiB0aGUgcmlnaHQtcG9pbnQgYXJyb3cgc3ludGF4IGlzXG4gICAgICAgICAgLy8gcmVhbGx5OiAgQD57b3B0aW9uYWwgbGFiZWx9PntvcHRpb25hbCBsYWJlbH0+XG4gICAgICAgICAgLy8gQ29sbGVjdCBwYXJzZU5vZGVzIGludG8gbGFiZWxzLlxuICAgICAgICAgIGZvciAodmFyIGxhYmVsTnVtID0gMDsgbGFiZWxOdW0gPCAyOyBsYWJlbE51bSsrKSB7XG4gICAgICAgICAgICB2YXIgaW5MYWJlbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgPSBqICsgMTsgayA8IHJvd05vZGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChpc0xhYmVsRW5kKHJvd05vZGVzW2tdLCBhcnJvd0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgaW5MYWJlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGogPSBrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3RhcnRPZkFycm93KHJvd05vZGVzW2tdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxhYmVsc1tsYWJlbE51bV0uYm9keS5wdXNoKHJvd05vZGVzW2tdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluTGFiZWwpIHtcbiAgICAgICAgICAgICAgLy8gaXNMYWJlbEVuZCBuZXZlciByZXR1cm5lZCBhIHRydWUuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzc2luZyBhIFwiICsgYXJyb3dDaGFyICsgXCIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuXCIsIHJvd05vZGVzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBvbmUgb2YgXFxcIjw+QVY9fC5cXFwiIGFmdGVyIEBcIiwgcm93Tm9kZXNbal0pO1xuICAgICAgICB9IC8vIE5vdyBqb2luIHRoZSBhcnJvdyB0byBpdHMgbGFiZWxzLlxuXG5cbiAgICAgICAgdmFyIGFycm93ID0gY2RBcnJvdyhhcnJvd0NoYXIsIGxhYmVscywgcGFyc2VyKTsgLy8gV3JhcCB0aGUgYXJyb3cgaW4gIFBhcnNlTm9kZTxcInN0eWxpbmdcIj4uXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBtYXRjaCBwYXJzZUFycmF5KCkgYmVoYXZpb3IuXG5cbiAgICAgICAgdmFyIHdyYXBwZWRBcnJvdyA9IHtcbiAgICAgICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgICAgICBib2R5OiBbYXJyb3ddLFxuICAgICAgICAgIG1vZGU6IFwibWF0aFwiLFxuICAgICAgICAgIHN0eWxlOiBcImRpc3BsYXlcIiAvLyBDRCBpcyBhbHdheXMgZGlzcGxheXN0eWxlLlxuXG4gICAgICAgIH07XG4gICAgICAgIHJvdy5wdXNoKHdyYXBwZWRBcnJvdyk7IC8vIEluIENEJ3Mgc3ludGF4LCBjZWxscyBhcmUgaW1wbGljaXQuIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgdGhhdFxuICAgICAgICAvLyBpcyBub3QgYW4gYXJyb3cgZ2V0cyBjb2xsZWN0ZWQgaW50byBhIGNlbGwuIFNvIGNyZWF0ZSBhbiBlbXB0eVxuICAgICAgICAvLyBjZWxsIG5vdy4gSXQgd2lsbCBjb2xsZWN0IHVwY29taW5nIHBhcnNlTm9kZXMuXG5cbiAgICAgICAgY2VsbCA9IG5ld0NlbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSAlIDIgPT09IDApIHtcbiAgICAgIC8vIEV2ZW4tbnVtYmVyZWQgcm93cyBjb25zaXN0IG9mOiBjZWxsLCBhcnJvdywgY2VsbCwgYXJyb3csIC4uLiBjZWxsXG4gICAgICAvLyBUaGUgbGFzdCBjZWxsIGlzIG5vdCB5ZXQgcHVzaGVkIGludG8gYHJvd2AsIHNvOlxuICAgICAgcm93LnB1c2goY2VsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9kZC1udW1iZXJlZCByb3dzIGNvbnNpc3Qgb2Y6IHZlcnQgYXJyb3csIGVtcHR5IGNlbGwsIC4uLiB2ZXJ0IGFycm93XG4gICAgICAvLyBSZW1vdmUgdGhlIGVtcHR5IGNlbGwgdGhhdCB3YXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHJvd2AuXG4gICAgICByb3cuc2hpZnQoKTtcbiAgICB9XG5cbiAgICByb3cgPSBbXTtcbiAgICBib2R5LnB1c2gocm93KTtcbiAgfSAvLyBFbmQgcm93IGdyb3VwXG5cblxuICBwYXJzZXIuZ3VsbGV0LmVuZEdyb3VwKCk7IC8vIEVuZCBhcnJheSBncm91cCBkZWZpbmluZyBcXFxcXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBkZWZpbmUgY29sdW1uIHNlcGFyYXRpb24uXG5cbiAgdmFyIGNvbHMgPSBuZXcgQXJyYXkoYm9keVswXS5sZW5ndGgpLmZpbGwoe1xuICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICBhbGlnbjogXCJjXCIsXG4gICAgcHJlZ2FwOiAwLjI1LFxuICAgIC8vIENEIHBhY2thZ2Ugc2V0cyBcXGVuc2tpcCBiZXR3ZWVuIGNvbHVtbnMuXG4gICAgcG9zdGdhcDogMC4yNSAvLyBTbyBwcmUgYW5kIHBvc3QgZWFjaCBnZXQgaGFsZiBhbiBcXGVuc2tpcCwgaS5lLiAwLjI1ZW0uXG5cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJhcnJheVwiLFxuICAgIG1vZGU6IFwibWF0aFwiLFxuICAgIGJvZHksXG4gICAgYXJyYXlzdHJldGNoOiAxLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICByb3dHYXBzOiBbbnVsbF0sXG4gICAgY29scyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZTogXCJDRFwiLFxuICAgIGhMaW5lc0JlZm9yZVJvdzogbmV3IEFycmF5KGJvZHkubGVuZ3RoICsgMSkuZmlsbChbXSlcbiAgfTtcbn0gLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXG4vLyBUaGV5IGFyZSBoZXJlIG9ubHkgZm9yIGludGVybmFsIHVzZSBieSB0aGUge0NEfSBlbnZpcm9ubWVudCBpbiBwbGFjaW5nIGxhYmVsc1xuLy8gbmV4dCB0byB2ZXJ0aWNhbCBhcnJvd3MuXG4vLyBXZSBkb24ndCBuZWVkIGFueSBzdWNoIGZ1bmN0aW9ucyBmb3IgaG9yaXpvbnRhbCBhcnJvd3MgYmVjYXVzZSB3ZSBjYW4gcmV1c2Vcbi8vIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGV4dGVuc2libGUgYXJyb3dzLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY2RsYWJlbFwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxjZGxlZnRcIiwgXCJcXFxcXFxcXGNkcmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNkbGFiZWxcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgc2lkZTogZnVuY05hbWUuc2xpY2UoNCksXG4gICAgICBsYWJlbDogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS5zdXAoKSk7XG4gICAgdmFyIGxhYmVsID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5sYWJlbCwgbmV3T3B0aW9ucywgb3B0aW9ucyksIG9wdGlvbnMpO1xuICAgIGxhYmVsLmNsYXNzZXMucHVzaChcImNkLWxhYmVsLVwiICsgZ3JvdXAuc2lkZSk7XG4gICAgbGFiZWwuc3R5bGUuYm90dG9tID0gbWFrZUVtKDAuOCAtIGxhYmVsLmRlcHRoKTsgLy8gWmVybyBvdXQgbGFiZWwgaGVpZ2h0ICYgZGVwdGgsIHNvIHZlcnRpY2FsIGFsaWduIG9mIGFycm93IGlzIHNldFxuICAgIC8vIGJ5IHRoZSBhcnJvdyBoZWlnaHQsIG5vdCBieSB0aGUgbGFiZWwuXG5cbiAgICBsYWJlbC5oZWlnaHQgPSAwO1xuICAgIGxhYmVsLmRlcHRoID0gMDtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5sYWJlbCwgb3B0aW9ucyldKTtcbiAgICBsYWJlbCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbbGFiZWxdKTtcbiAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBcIik7XG5cbiAgICBpZiAoZ3JvdXAuc2lkZSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgIGxhYmVsLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBcIi0xd2lkdGhcIik7XG4gICAgfSAvLyBXZSBoYXZlIHRvIGd1ZXNzIGF0IHZlcnRpY2FsIGFsaWdubWVudC4gV2Uga25vdyB0aGUgYXJyb3cgaXMgMS44ZW0gdGFsbCxcbiAgICAvLyBCdXQgd2UgZG9uJ3Qga25vdyB0aGUgaGVpZ2h0IG9yIGRlcHRoIG9mIHRoZSBsYWJlbC5cblxuXG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwidm9mZnNldFwiLCBcIjAuN2VtXCIpO1xuICAgIGxhYmVsID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgW2xhYmVsXSk7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIFwiZmFsc2VcIik7XG4gICAgbGFiZWwuc2V0QXR0cmlidXRlKFwic2NyaXB0bGV2ZWxcIiwgXCIxXCIpO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gIG5hbWVzOiBbXCJcXFxcXFxcXGNkcGFyZW50XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYyLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJjZGxhYmVscGFyZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGZyYWdtZW50OiBhcmdzWzBdXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFdyYXAgdGhlIHZlcnRpY2FsIGFycm93IGFuZCBpdHMgbGFiZWxzLlxuICAgIC8vIFRoZSBwYXJlbnQgZ2V0cyBwb3NpdGlvbjogcmVsYXRpdmUuIFRoZSBjaGlsZCBnZXRzIHBvc2l0aW9uOiBhYnNvbHV0ZS5cbiAgICAvLyBTbyBDU1MgY2FuIGxvY2F0ZSB0aGUgbGFiZWwgY29ycmVjdGx5LlxuICAgIHZhciBwYXJlbnQgPSBidWlsZENvbW1vbi53cmFwRnJhZ21lbnQoYnVpbGRHcm91cCQxKGdyb3VwLmZyYWdtZW50LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgcGFyZW50LmNsYXNzZXMucHVzaChcImNkLXZlcnQtYXJyb3dcIik7XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBbYnVpbGRHcm91cChncm91cC5mcmFnbWVudCwgb3B0aW9ucyldKTtcbiAgfVxuXG59KTtcblxuLy8gezEyM30gYW5kIGNvbnZlcnRzIGludG8gc3ltYm9sIHdpdGggY29kZSAxMjMuICBJdCBpcyB1c2VkIGJ5IHRoZSAqbWFjcm8qXG4vLyBcXGNoYXIgZGVmaW5lZCBpbiBtYWNyb3MuanMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gIG5hbWVzOiBbXCJcXFxcQGNoYXJcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBhcmcgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpO1xuICAgIHZhciBncm91cCA9IGFyZy5ib2R5O1xuICAgIHZhciBudW1iZXIgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnROb2RlVHlwZShncm91cFtpXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgbnVtYmVyICs9IG5vZGUudGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IHBhcnNlSW50KG51bWJlcik7XG4gICAgdmFyIHRleHQ7XG5cbiAgICBpZiAoaXNOYU4oY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCBcIiArIG51bWJlcik7IC8vIElmIHdlIGRyb3AgSUUgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAgIC8vIHRleHQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKVxuICAgIH0gZWxzZSBpZiAoY29kZSA8IDAgfHwgY29kZSA+PSAweDEwZmZmZikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcQGNoYXIgd2l0aCBpbnZhbGlkIGNvZGUgcG9pbnQgXCIgKyBudW1iZXIpO1xuICAgIH0gZWxzZSBpZiAoY29kZSA8PSAweGZmZmYpIHtcbiAgICAgIHRleHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW50byBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICBjb2RlIC09IDB4MTAwMDA7XG4gICAgICB0ZXh0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweGQ4MDAsIChjb2RlICYgMHgzZmYpICsgMHhkYzAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHRleHQ6IHRleHRcbiAgICB9O1xuICB9XG5cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkOCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvciksIGZhbHNlKTsgLy8gXFxjb2xvciBpc24ndCBzdXBwb3NlZCB0byBhZmZlY3QgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLlxuICAvLyBUbyBhY2NvbXBsaXNoIHRoaXMsIHdlIHdyYXAgdGhlIHJlc3VsdHMgaW4gYSBmcmFnbWVudCwgc28gdGhlIGlubmVyXG4gIC8vIGVsZW1lbnRzIHdpbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZWlyIG5laWdoYm9ycy4gRm9yXG4gIC8vIGV4YW1wbGUsIGBcXGNvbG9ye3JlZH17MiArfSAzYCBoYXMgdGhlIHNhbWUgc3BhY2luZyBhcyBgMiArIDNgXG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ3ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zLndpdGhDb2xvcihncm91cC5jb2xvcikpO1xuICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAuY29sb3IpO1xuICByZXR1cm4gbm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjb2xvclwiLFxuICBuYW1lczogW1wiXFxcXHRleHRjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwib3JpZ2luYWxcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgY29sb3IsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiY29sb3JcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBicmVha09uVG9rZW5UZXh0XG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7IC8vIFNldCBtYWNybyBcXGN1cnJlbnRAY29sb3IgaW4gY3VycmVudCBuYW1lc3BhY2UgdG8gc3RvcmUgdGhlIGN1cnJlbnRcbiAgICAvLyBjb2xvciwgbWltaWNraW5nIHRoZSBiZWhhdmlvciBvZiBjb2xvci5zdHkuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBqdXN0IHRvIGNvcnJlY3RseSBjb2xvciBhIFxccmlnaHRcbiAgICAvLyB0aGF0IGZvbGxvd3MgYSBcXGNvbG9yIGNvbW1hbmQuXG5cbiAgICBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5zZXQoXCJcXFxcY3VycmVudEBjb2xvclwiLCBjb2xvcik7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keSB0aGF0IHNob3VsZCBiZSBjb2xvcmVkLlxuXG4gICAgdmFyIGJvZHkgPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHRydWUsIGJyZWFrT25Ub2tlblRleHQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbG9yXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbG9yLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDgsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkN1xufSk7XG5cbi8vIFJvdyBicmVha3Mgd2l0aGluIHRhYnVsYXIgZW52aXJvbm1lbnRzLCBhbmQgbGluZSBicmVha3MgYXQgdG9wIGxldmVsXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJjclwiLFxuICBuYW1lczogW1wiXFxcXFxcXFxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc2l6ZSA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCkudGV4dCA9PT0gXCJbXCIgPyBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSkgOiBudWxsO1xuICAgIHZhciBuZXdMaW5lID0gIXBhcnNlci5zZXR0aW5ncy5kaXNwbGF5TW9kZSB8fCAhcGFyc2VyLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKFwibmV3TGluZUluRGlzcGxheU1vZGVcIiwgXCJJbiBMYVRlWCwgXFxcXFxcXFwgb3IgXFxcXG5ld2xpbmUgXCIgKyBcImRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY3JcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbmV3TGluZSxcbiAgICAgIHNpemU6IHNpemUgJiYgYXNzZXJ0Tm9kZVR5cGUoc2l6ZSwgXCJzaXplXCIpLnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICAvLyBUaGUgZm9sbG93aW5nIGJ1aWxkZXJzIGFyZSBjYWxsZWQgb25seSBhdCB0aGUgdG9wIGxldmVsLFxuICAvLyBub3Qgd2l0aGluIHRhYnVsYXIvYXJyYXkgZW52aXJvbm1lbnRzLlxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoZ3JvdXAubmV3TGluZSkge1xuICAgICAgc3Bhbi5jbGFzc2VzLnB1c2goXCJuZXdsaW5lXCIpO1xuXG4gICAgICBpZiAoZ3JvdXAuc2l6ZSkge1xuICAgICAgICBzcGFuLnN0eWxlLm1hcmdpblRvcCA9IG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zcGFjZVwiKTtcblxuICAgIGlmIChncm91cC5uZXdMaW5lKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmVicmVha1wiLCBcIm5ld2xpbmVcIik7XG5cbiAgICAgIGlmIChncm91cC5zaXplKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIG1ha2VFbShjYWxjdWxhdGVTaXplKGdyb3VwLnNpemUsIG9wdGlvbnMpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBnbG9iYWxNYXAgPSB7XG4gIFwiXFxcXGdsb2JhbFwiOiBcIlxcXFxnbG9iYWxcIixcbiAgXCJcXFxcbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiOiBcIlxcXFxcXFxcZ2xvYmFsbG9uZ1wiLFxuICBcIlxcXFxkZWZcIjogXCJcXFxcZ2RlZlwiLFxuICBcIlxcXFxnZGVmXCI6IFwiXFxcXGdkZWZcIixcbiAgXCJcXFxcZWRlZlwiOiBcIlxcXFx4ZGVmXCIsXG4gIFwiXFxcXHhkZWZcIjogXCJcXFxceGRlZlwiLFxuICBcIlxcXFxsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGxldFwiLFxuICBcIlxcXFxmdXR1cmVsZXRcIjogXCJcXFxcXFxcXGdsb2JhbGZ1dHVyZVwiXG59O1xuXG52YXIgY2hlY2tDb250cm9sU2VxdWVuY2UgPSB0b2sgPT4ge1xuICB2YXIgbmFtZSA9IHRvay50ZXh0O1xuXG4gIGlmICgvXig/OltcXFxce30kJiNeX118RU9GKSQvLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59O1xuXG52YXIgZ2V0UkhTID0gcGFyc2VyID0+IHtcbiAgdmFyIHRvayA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcblxuICBpZiAodG9rLnRleHQgPT09IFwiPVwiKSB7XG4gICAgLy8gY29uc3VtZSBvcHRpb25hbCBlcXVhbHNcbiAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICBpZiAodG9rLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAvLyBjb25zdW1lIG9uZSBvcHRpb25hbCBzcGFjZVxuICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2s7XG59O1xuXG52YXIgbGV0Q29tbWFuZCA9IChwYXJzZXIsIG5hbWUsIHRvaywgZ2xvYmFsKSA9PiB7XG4gIHZhciBtYWNybyA9IHBhcnNlci5ndWxsZXQubWFjcm9zLmdldCh0b2sudGV4dCk7XG5cbiAgaWYgKG1hY3JvID09IG51bGwpIHtcbiAgICAvLyBkb24ndCBleHBhbmQgaXQgbGF0ZXIgZXZlbiBpZiBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBkZWZpbmVkXG4gICAgLy8gZS5nLiwgXFxsZXRcXGZvbz1cXGZyYWMgXFxkZWZcXGZyYWN7XFxyZWxheH0gXFxmcmFjMTJcbiAgICB0b2subm9leHBhbmQgPSB0cnVlO1xuICAgIG1hY3JvID0ge1xuICAgICAgdG9rZW5zOiBbdG9rXSxcbiAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAvLyByZXByb2R1Y2UgdGhlIHNhbWUgYmVoYXZpb3IgaW4gZXhwYW5zaW9uXG4gICAgICB1bmV4cGFuZGFibGU6ICFwYXJzZXIuZ3VsbGV0LmlzRXhwYW5kYWJsZSh0b2sudGV4dClcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KG5hbWUsIG1hY3JvLCBnbG9iYWwpO1xufTsgLy8gPGFzc2lnbm1lbnQ+IC0+IDxub24tbWFjcm8gYXNzaWdubWVudD58PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+IC0+IDxzaW1wbGUgYXNzaWdubWVudD58XFxnbG9iYWw8bm9uLW1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8bWFjcm8gYXNzaWdubWVudD4gLT4gPGRlZmluaXRpb24+fDxwcmVmaXg+PG1hY3JvIGFzc2lnbm1lbnQ+XG4vLyA8cHJlZml4PiAtPiBcXGdsb2JhbHxcXGxvbmd8XFxvdXRlclxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGdsb2JhbFwiLCBcIlxcXFxsb25nXCIsIFwiXFxcXFxcXFxnbG9iYWxsb25nXCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICB2YXIgdG9rZW4gPSBwYXJzZXIuZmV0Y2goKTtcblxuICAgIGlmIChnbG9iYWxNYXBbdG9rZW4udGV4dF0pIHtcbiAgICAgIC8vIEthVGVYIGRvZXNuJ3QgaGF2ZSBcXHBhciwgc28gaWdub3JlIFxcbG9uZ1xuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxnbG9iYWxcIiB8fCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxvbmdcIikge1xuICAgICAgICB0b2tlbi50ZXh0ID0gZ2xvYmFsTWFwW3Rva2VuLnRleHRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJpbnRlcm5hbFwiKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4XCIsIHRva2VuKTtcbiAgfVxuXG59KTsgLy8gQmFzaWMgc3VwcG9ydCBmb3IgbWFjcm8gZGVmaW5pdGlvbnM6IFxcZGVmLCBcXGdkZWYsIFxcZWRlZiwgXFx4ZGVmXG4vLyA8ZGVmaW5pdGlvbj4gLT4gPGRlZj48Y29udHJvbCBzZXF1ZW5jZT48ZGVmaW5pdGlvbiB0ZXh0PlxuLy8gPGRlZj4gLT4gXFxkZWZ8XFxnZGVmfFxcZWRlZnxcXHhkZWZcbi8vIDxkZWZpbml0aW9uIHRleHQ+IC0+IDxwYXJhbWV0ZXIgdGV4dD48bGVmdCBicmFjZT48YmFsYW5jZWQgdGV4dD48cmlnaHQgYnJhY2U+XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGRlZlwiLCBcIlxcXFxnZGVmXCIsIFwiXFxcXGVkZWZcIiwgXCJcXFxceGRlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMikge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIHZhciBuYW1lID0gdG9rLnRleHQ7XG5cbiAgICBpZiAoL14oPzpbXFxcXHt9JCYjXl9dfEVPRikkLy50ZXN0KG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZVwiLCB0b2spO1xuICAgIH1cblxuICAgIHZhciBudW1BcmdzID0gMDtcbiAgICB2YXIgaW5zZXJ0O1xuICAgIHZhciBkZWxpbWl0ZXJzID0gW1tdXTsgLy8gPHBhcmFtZXRlciB0ZXh0PiBjb250YWlucyBubyBicmFjZXNcblxuICAgIHdoaWxlIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICB0b2sgPSBwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2sudGV4dCA9PT0gXCIjXCIpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZlcnkgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIDxwYXJhbWV0ZXIgdGV4dD4gaXMgIywgc28gdGhhdFxuICAgICAgICAvLyB0aGlzICMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgeywgVGVYIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSB7XG4gICAgICAgIC8vIGhhZCBiZWVuIGluc2VydGVkIGF0IHRoZSByaWdodCBlbmQgb2YgYm90aCB0aGUgcGFyYW1ldGVyIHRleHRcbiAgICAgICAgLy8gYW5kIHRoZSByZXBsYWNlbWVudCB0ZXh0LlxuICAgICAgICBpZiAocGFyc2VyLmd1bGxldC5mdXR1cmUoKS50ZXh0ID09PSBcIntcIikge1xuICAgICAgICAgIGluc2VydCA9IHBhcnNlci5ndWxsZXQuZnV0dXJlKCk7XG4gICAgICAgICAgZGVsaW1pdGVyc1tudW1BcmdzXS5wdXNoKFwie1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBBIHBhcmFtZXRlciwgdGhlIGZpcnN0IGFwcGVhcmFuY2Ugb2YgIyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDEsXG4gICAgICAgIC8vIHRoZSBuZXh0IGJ5IDIsIGFuZCBzbyBvbjsgdXAgdG8gbmluZSAj4oCZcyBhcmUgYWxsb3dlZFxuXG5cbiAgICAgICAgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmICghL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IG51bWJlciBcXFwiXCIgKyB0b2sudGV4dCArIFwiXFxcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZUludCh0b2sudGV4dCkgIT09IG51bUFyZ3MgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBcmd1bWVudCBudW1iZXIgXFxcIlwiICsgdG9rLnRleHQgKyBcIlxcXCIgb3V0IG9mIG9yZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtQXJncysrO1xuICAgICAgICBkZWxpbWl0ZXJzLnB1c2goW10pO1xuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvblwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGltaXRlcnNbbnVtQXJnc10ucHVzaCh0b2sudGV4dCk7XG4gICAgICB9XG4gICAgfSAvLyByZXBsYWNlbWVudCB0ZXh0LCBlbmNsb3NlZCBpbiAneycgYW5kICd9JyBhbmQgcHJvcGVybHkgbmVzdGVkXG5cblxuICAgIHZhciB7XG4gICAgICB0b2tlbnNcbiAgICB9ID0gcGFyc2VyLmd1bGxldC5jb25zdW1lQXJnKCk7XG5cbiAgICBpZiAoaW5zZXJ0KSB7XG4gICAgICB0b2tlbnMudW5zaGlmdChpbnNlcnQpO1xuICAgIH1cblxuICAgIGlmIChmdW5jTmFtZSA9PT0gXCJcXFxcZWRlZlwiIHx8IGZ1bmNOYW1lID09PSBcIlxcXFx4ZGVmXCIpIHtcbiAgICAgIHRva2VucyA9IHBhcnNlci5ndWxsZXQuZXhwYW5kVG9rZW5zKHRva2Vucyk7XG4gICAgICB0b2tlbnMucmV2ZXJzZSgpOyAvLyB0byBmaXQgaW4gd2l0aCBzdGFjayBvcmRlclxuICAgIH0gLy8gRmluYWwgYXJnIGlzIHRoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvXG5cblxuICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgICB0b2tlbnMsXG4gICAgICBudW1BcmdzLFxuICAgICAgZGVsaW1pdGVyc1xuICAgIH0sIGZ1bmNOYW1lID09PSBnbG9iYWxNYXBbZnVuY05hbWVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyA8c2ltcGxlIGFzc2lnbm1lbnQ+IC0+IDxsZXQgYXNzaWdubWVudD5cbi8vIDxsZXQgYXNzaWdubWVudD4gLT4gXFxmdXR1cmVsZXQ8Y29udHJvbCBzZXF1ZW5jZT48dG9rZW4+PHRva2VuPlxuLy8gICAgIHwgXFxsZXQ8Y29udHJvbCBzZXF1ZW5jZT48ZXF1YWxzPjxvbmUgb3B0aW9uYWwgc3BhY2U+PHRva2VuPlxuLy8gPGVxdWFscz4gLT4gPG9wdGlvbmFsIHNwYWNlcz58PG9wdGlvbmFsIHNwYWNlcz49XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICBuYW1lczogW1wiXFxcXGxldFwiLCBcIlxcXFxcXFxcZ2xvYmFsbGV0XCIgLy8gY2Fu4oCZdCBiZSBlbnRlcmVkIGRpcmVjdGx5XG4gIF0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIG5hbWUgPSBjaGVja0NvbnRyb2xTZXF1ZW5jZShwYXJzZXIuZ3VsbGV0LnBvcFRva2VuKCkpO1xuICAgIHBhcnNlci5ndWxsZXQuY29uc3VtZVNwYWNlcygpO1xuICAgIHZhciB0b2sgPSBnZXRSSFMocGFyc2VyKTtcbiAgICBsZXRDb21tYW5kKHBhcnNlciwgbmFtZSwgdG9rLCBmdW5jTmFtZSA9PT0gXCJcXFxcXFxcXGdsb2JhbGxldFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pOyAvLyByZWY6IGh0dHBzOi8vd3d3LnR1Zy5vcmcvVFVHYm9hdC90YjA5LTMvdGIyMmJlY2h0b2xzaGVpbS5wZGZcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxcZnV0dXJlbGV0XCIsIFwiXFxcXFxcXFxnbG9iYWxmdXR1cmVcIiAvLyBjYW7igJl0IGJlIGVudGVyZWQgZGlyZWN0bHlcbiAgXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbmFtZSA9IGNoZWNrQ29udHJvbFNlcXVlbmNlKHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKSk7XG4gICAgdmFyIG1pZGRsZSA9IHBhcnNlci5ndWxsZXQucG9wVG9rZW4oKTtcbiAgICB2YXIgdG9rID0gcGFyc2VyLmd1bGxldC5wb3BUb2tlbigpO1xuICAgIGxldENvbW1hbmQocGFyc2VyLCBuYW1lLCB0b2ssIGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcZ2xvYmFsZnV0dXJlXCIpO1xuICAgIHBhcnNlci5ndWxsZXQucHVzaFRva2VuKHRvayk7XG4gICAgcGFyc2VyLmd1bGxldC5wdXNoVG9rZW4obWlkZGxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJpbnRlcm5hbFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGVcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIFRoaXMgZmlsZSBkZWFscyB3aXRoIGNyZWF0aW5nIGRlbGltaXRlcnMgb2YgdmFyaW91cyBzaXplcy4gVGhlIFRlWGJvb2tcbiAqIGRpc2N1c3NlcyB0aGVzZSByb3V0aW5lcyBvbiBwYWdlIDQ0MS00NDIsIGluIHRoZSBcIkFub3RoZXIgc3Vicm91dGluZSBzZXRzIGJveFxuICogeCB0byBhIHNwZWNpZmllZCB2YXJpYWJsZSBkZWxpbWl0ZXJcIiBwYXJhZ3JhcGguXG4gKlxuICogVGhlcmUgYXJlIHRocmVlIG1haW4gcm91dGluZXMgaGVyZS4gYG1ha2VTbWFsbERlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0aGVcbiAqIG5vcm1hbCBmb250LCBidXQgaW4gZWl0aGVyIHRleHQsIHNjcmlwdCwgb3Igc2NyaXB0c2NyaXB0IHN0eWxlLlxuICogYG1ha2VMYXJnZURlbGltYCBtYWtlcyBhIGRlbGltaXRlciBpbiB0ZXh0c3R5bGUsIGJ1dCBpbiBvbmUgb2YgdGhlIFNpemUxLFxuICogU2l6ZTIsIFNpemUzLCBvciBTaXplNCBmb250cy4gYG1ha2VTdGFja2VkRGVsaW1gIG1ha2VzIGEgZGVsaW1pdGVyIG91dCBvZlxuICogc21hbGxlciBwaWVjZXMgdGhhdCBhcmUgc3RhY2tlZCBvbiB0b3Agb2Ygb25lIGFub3RoZXIuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIGBjZW50ZXJgLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMuXG4gKlxuICogVGhlbiwgdGhlcmUgYXJlIHRocmVlIGV4cG9zZWQgZnVuY3Rpb25zLiBgc2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgaW5cbiAqIG9uZSBvZiB0aGUgZ2l2ZW4gc2l6ZXMuIFRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIGxpa2UgYFxcYmlnbGAuXG4gKiBgY3VzdG9tU2l6ZWREZWxpbWAgbWFrZXMgYSBkZWxpbWl0ZXIgd2l0aCBhIGdpdmVuIHRvdGFsIGhlaWdodCtkZXB0aC4gSXQgaXNcbiAqIGNhbGxlZCBpbiBwbGFjZXMgbGlrZSBgXFxzcXJ0YC4gYGxlZnRSaWdodERlbGltYCBtYWtlcyBhbiBhcHByb3ByaWF0ZVxuICogZGVsaW1pdGVyIHdoaWNoIHN1cnJvdW5kcyBhbiBleHByZXNzaW9uIG9mIGEgZ2l2ZW4gaGVpZ2h0IGFuIGRlcHRoLiBJdCBpc1xuICogdXNlZCBpbiBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBtZXRyaWNzIGZvciBhIGdpdmVuIHN5bWJvbCBhbmQgZm9udCwgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gKGkuZS5cbiAqIGFmdGVyIGZvbGxvd2luZyByZXBsYWNlbWVudCBmcm9tIHN5bWJvbHMuanMpXG4gKi9cbnZhciBnZXRNZXRyaWNzID0gZnVuY3Rpb24gZ2V0TWV0cmljcyhzeW1ib2wsIGZvbnQsIG1vZGUpIHtcbiAgdmFyIHJlcGxhY2UgPSBzeW1ib2xzLm1hdGhbc3ltYm9sXSAmJiBzeW1ib2xzLm1hdGhbc3ltYm9sXS5yZXBsYWNlO1xuICB2YXIgbWV0cmljcyA9IGdldENoYXJhY3Rlck1ldHJpY3MocmVwbGFjZSB8fCBzeW1ib2wsIGZvbnQsIG1vZGUpO1xuXG4gIGlmICghbWV0cmljcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN5bWJvbCBcIiArIHN5bWJvbCArIFwiIGFuZCBmb250IHNpemUgXCIgKyBmb250ICsgXCIuXCIpO1xuICB9XG5cbiAgcmV0dXJuIG1ldHJpY3M7XG59O1xuLyoqXG4gKiBQdXRzIGEgZGVsaW1pdGVyIHNwYW4gaW4gYSBnaXZlbiBzdHlsZSwgYW5kIGFkZHMgYXBwcm9wcmlhdGUgaGVpZ2h0LCBkZXB0aCxcbiAqIGFuZCBtYXhGb250U2l6ZXMuXG4gKi9cblxuXG52YXIgc3R5bGVXcmFwID0gZnVuY3Rpb24gc3R5bGVXcmFwKGRlbGltLCB0b1N0eWxlLCBvcHRpb25zLCBjbGFzc2VzKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUodG9TdHlsZSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3Nlcy5jb25jYXQobmV3T3B0aW9ucy5zaXppbmdDbGFzc2VzKG9wdGlvbnMpKSwgW2RlbGltXSwgb3B0aW9ucyk7XG4gIHZhciBkZWxpbVNpemVNdWx0aXBsaWVyID0gbmV3T3B0aW9ucy5zaXplTXVsdGlwbGllciAvIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uaGVpZ2h0ICo9IGRlbGltU2l6ZU11bHRpcGxpZXI7XG4gIHNwYW4uZGVwdGggKj0gZGVsaW1TaXplTXVsdGlwbGllcjtcbiAgc3Bhbi5tYXhGb250U2l6ZSA9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gIHJldHVybiBzcGFuO1xufTtcblxudmFyIGNlbnRlclNwYW4gPSBmdW5jdGlvbiBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIHN0eWxlKSB7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoc3R5bGUpO1xuICB2YXIgc2hpZnQgPSAoMSAtIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyKSAqIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuICBzcGFuLmNsYXNzZXMucHVzaChcImRlbGltY2VudGVyXCIpO1xuICBzcGFuLnN0eWxlLnRvcCA9IG1ha2VFbShzaGlmdCk7XG4gIHNwYW4uaGVpZ2h0IC09IHNoaWZ0O1xuICBzcGFuLmRlcHRoICs9IHNoaWZ0O1xufTtcbi8qKlxuICogTWFrZXMgYSBzbWFsbCBkZWxpbWl0ZXIuIFRoaXMgaXMgYSBkZWxpbWl0ZXIgdGhhdCBjb21lcyBpbiB0aGUgTWFpbi1SZWd1bGFyXG4gKiBmb250LCBidXQgaXMgcmVzdHlsZWQgdG8gZWl0aGVyIGJlIGluIHRleHRzdHlsZSwgc2NyaXB0c3R5bGUsIG9yXG4gKiBzY3JpcHRzY3JpcHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlU21hbGxEZWxpbSA9IGZ1bmN0aW9uIG1ha2VTbWFsbERlbGltKGRlbGltLCBzdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIHZhciB0ZXh0ID0gYnVpbGRDb21tb24ubWFrZVN5bWJvbChkZWxpbSwgXCJNYWluLVJlZ3VsYXJcIiwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKHRleHQsIHN0eWxlLCBvcHRpb25zLCBjbGFzc2VzKTtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgY2VudGVyU3BhbihzcGFuLCBvcHRpb25zLCBzdHlsZSk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gZm9udCBzaXplIChub3RlIHNpemUgaXMgYW4gaW50ZWdlcilcbiAqL1xuXG5cbnZhciBtYXRocm1TaXplID0gZnVuY3Rpb24gbWF0aHJtU2l6ZSh2YWx1ZSwgc2l6ZSwgbW9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN5bWJvbCh2YWx1ZSwgXCJTaXplXCIgKyBzaXplICsgXCItUmVndWxhclwiLCBtb2RlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgbGFyZ2UgZGVsaW1pdGVyLiBUaGlzIGlzIGEgZGVsaW1pdGVyIHRoYXQgY29tZXMgaW4gdGhlIFNpemUxLCBTaXplMixcbiAqIFNpemUzLCBvciBTaXplNCBmb250cy4gSXQgaXMgYWx3YXlzIHJlbmRlcmVkIGluIHRleHRzdHlsZS5cbiAqL1xuXG5cbnZhciBtYWtlTGFyZ2VEZWxpbSA9IGZ1bmN0aW9uIG1ha2VMYXJnZURlbGltKGRlbGltLCBzaXplLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgdmFyIGlubmVyID0gbWF0aHJtU2l6ZShkZWxpbSwgc2l6ZSwgbW9kZSwgb3B0aW9ucyk7XG4gIHZhciBzcGFuID0gc3R5bGVXcmFwKGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImRlbGltc2l6aW5nXCIsIFwic2l6ZVwiICsgc2l6ZV0sIFtpbm5lcl0sIG9wdGlvbnMpLCBTdHlsZSQxLlRFWFQsIG9wdGlvbnMsIGNsYXNzZXMpO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBjZW50ZXJTcGFuKHNwYW4sIG9wdGlvbnMsIFN0eWxlJDEuVEVYVCk7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn07XG4vKipcbiAqIE1ha2UgYSBzcGFuIGZyb20gYSBmb250IGdseXBoIHdpdGggdGhlIGdpdmVuIG9mZnNldCBhbmQgaW4gdGhlIGdpdmVuIGZvbnQuXG4gKiBUaGlzIGlzIHVzZWQgaW4gbWFrZVN0YWNrZWREZWxpbSB0byBtYWtlIHRoZSBzdGFja2luZyBwaWVjZXMgZm9yIHRoZSBkZWxpbWl0ZXIuXG4gKi9cblxuXG52YXIgbWFrZUdseXBoU3BhbiA9IGZ1bmN0aW9uIG1ha2VHbHlwaFNwYW4oc3ltYm9sLCBmb250LCBtb2RlKSB7XG4gIHZhciBzaXplQ2xhc3M7IC8vIEFwcGx5IHRoZSBjb3JyZWN0IENTUyBjbGFzcyB0byBjaG9vc2UgdGhlIHJpZ2h0IGZvbnQuXG5cbiAgaWYgKGZvbnQgPT09IFwiU2l6ZTEtUmVndWxhclwiKSB7XG4gICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplMVwiO1xuICB9IGVsc2VcbiAgICAvKiBpZiAoZm9udCA9PT0gXCJTaXplNC1SZWd1bGFyXCIpICovXG4gICAge1xuICAgICAgc2l6ZUNsYXNzID0gXCJkZWxpbS1zaXplNFwiO1xuICAgIH1cblxuICB2YXIgY29ybmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdpbm5lclwiLCBzaXplQ2xhc3NdLCBbYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZENvbW1vbi5tYWtlU3ltYm9sKHN5bWJvbCwgZm9udCwgbW9kZSldKV0pOyAvLyBTaW5jZSB0aGlzIHdpbGwgYmUgcGFzc2VkIGludG8gYG1ha2VWTGlzdGAgaW4gdGhlIGVuZCwgd3JhcCB0aGUgZWxlbWVudFxuICAvLyBpbiB0aGUgYXBwcm9wcmlhdGUgdGFnIHRoYXQgVkxpc3QgdXNlcy5cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgIGVsZW06IGNvcm5lclxuICB9O1xufTtcblxudmFyIG1ha2VJbm5lciA9IGZ1bmN0aW9uIG1ha2VJbm5lcihjaCwgaGVpZ2h0LCBvcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhIHNwYW4gd2l0aCBpbmxpbmUgU1ZHIGZvciB0aGUgaW5uZXIgcGFydCBvZiBhIHRhbGwgc3RhY2tlZCBkZWxpbWl0ZXIuXG4gIHZhciB3aWR0aCA9IGZvbnRNZXRyaWNzRGF0YVsnU2l6ZTQtUmVndWxhciddW2NoLmNoYXJDb2RlQXQoMCldID8gZm9udE1ldHJpY3NEYXRhWydTaXplNC1SZWd1bGFyJ11bY2guY2hhckNvZGVBdCgwKV1bNF0gOiBmb250TWV0cmljc0RhdGFbJ1NpemUxLVJlZ3VsYXInXVtjaC5jaGFyQ29kZUF0KDApXVs0XTtcbiAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoXCJpbm5lclwiLCBpbm5lclBhdGgoY2gsIE1hdGgucm91bmQoMTAwMCAqIGhlaWdodCkpKTtcbiAgdmFyIHN2Z05vZGUgPSBuZXcgU3ZnTm9kZShbcGF0aF0sIHtcbiAgICBcIndpZHRoXCI6IG1ha2VFbSh3aWR0aCksXG4gICAgXCJoZWlnaHRcIjogbWFrZUVtKGhlaWdodCksXG4gICAgLy8gT3ZlcnJpZGUgQ1NTIHJ1bGUgYC5rYXRleCBzdmcgeyB3aWR0aDogMTAwJSB9YFxuICAgIFwic3R5bGVcIjogXCJ3aWR0aDpcIiArIG1ha2VFbSh3aWR0aCksXG4gICAgXCJ2aWV3Qm94XCI6IFwiMCAwIFwiICsgMTAwMCAqIHdpZHRoICsgXCIgXCIgKyBNYXRoLnJvdW5kKDEwMDAgKiBoZWlnaHQpLFxuICAgIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiOiBcInhNaW5ZTWluXCJcbiAgfSk7XG4gIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gIHNwYW4uaGVpZ2h0ID0gaGVpZ2h0O1xuICBzcGFuLnN0eWxlLmhlaWdodCA9IG1ha2VFbShoZWlnaHQpO1xuICBzcGFuLnN0eWxlLndpZHRoID0gbWFrZUVtKHdpZHRoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImVsZW1cIixcbiAgICBlbGVtOiBzcGFuXG4gIH07XG59OyAvLyBIZWxwZXJzIGZvciBtYWtlU3RhY2tlZERlbGltXG5cblxudmFyIGxhcEluRW1zID0gMC4wMDg7XG52YXIgbGFwID0ge1xuICB0eXBlOiBcImtlcm5cIixcbiAgc2l6ZTogLTEgKiBsYXBJbkVtc1xufTtcbnZhciB2ZXJ0cyA9IFtcInxcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcdmVydFwiXTtcbnZhciBkb3VibGVWZXJ0cyA9IFtcIlxcXFx8XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXFZlcnRcIl07XG4vKipcbiAqIE1ha2UgYSBzdGFja2VkIGRlbGltaXRlciBvdXQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIsIHdpdGggdGhlIHRvdGFsIGhlaWdodCBhdFxuICogbGVhc3QgYGhlaWdodFRvdGFsYC4gVGhpcyByb3V0aW5lIGlzIG1lbnRpb25lZCBvbiBwYWdlIDQ0MiBvZiB0aGUgVGVYYm9vay5cbiAqL1xuXG52YXIgbWFrZVN0YWNrZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodFRvdGFsLCBjZW50ZXIsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gVGhlcmUgYXJlIGZvdXIgcGFydHMsIHRoZSB0b3AsIGFuIG9wdGlvbmFsIG1pZGRsZSwgYSByZXBlYXRlZCBwYXJ0LCBhbmQgYVxuICAvLyBib3R0b20uXG4gIHZhciB0b3A7XG4gIHZhciBtaWRkbGU7XG4gIHZhciByZXBlYXQ7XG4gIHZhciBib3R0b207XG4gIHZhciBzdmdMYWJlbCA9IFwiXCI7XG4gIHZhciB2aWV3Qm94V2lkdGggPSAwO1xuICB0b3AgPSByZXBlYXQgPSBib3R0b20gPSBkZWxpbTtcbiAgbWlkZGxlID0gbnVsbDsgLy8gQWxzbyBrZWVwIHRyYWNrIG9mIHdoYXQgZm9udCB0aGUgZGVsaW1pdGVycyBhcmUgaW5cblxuICB2YXIgZm9udCA9IFwiU2l6ZTEtUmVndWxhclwiOyAvLyBXZSBzZXQgdGhlIHBhcnRzIGFuZCBmb250IGJhc2VkIG9uIHRoZSBzeW1ib2wuIE5vdGUgdGhhdCB3ZSB1c2VcbiAgLy8gJ1xcdTIzZDAnIGluc3RlYWQgb2YgJ3wnIGFuZCAnXFx1MjAxNicgaW5zdGVhZCBvZiAnXFxcXHwnIGZvciB0aGVcbiAgLy8gcmVwZWF0cyBvZiB0aGUgYXJyb3dzXG5cbiAgaWYgKGRlbGltID09PSBcIlxcXFx1cGFycm93XCIpIHtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzZDBcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcVXBhcnJvd1wiKSB7XG4gICAgcmVwZWF0ID0gYm90dG9tID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGRvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXERvd25hcnJvd1wiKSB7XG4gICAgdG9wID0gcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFx1cGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2QwXCI7XG4gICAgYm90dG9tID0gXCJcXFxcZG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXFVwZG93bmFycm93XCIpIHtcbiAgICB0b3AgPSBcIlxcXFxVcGFycm93XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMDE2XCI7XG4gICAgYm90dG9tID0gXCJcXFxcRG93bmFycm93XCI7XG4gIH0gZWxzZSBpZiAodXRpbHMuY29udGFpbnModmVydHMsIGRlbGltKSkge1xuICAgIHJlcGVhdCA9IFwiXFx1MjIyM1wiO1xuICAgIHN2Z0xhYmVsID0gXCJ2ZXJ0XCI7XG4gICAgdmlld0JveFdpZHRoID0gMzMzO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKGRvdWJsZVZlcnRzLCBkZWxpbSkpIHtcbiAgICByZXBlYXQgPSBcIlxcdTIyMjVcIjtcbiAgICBzdmdMYWJlbCA9IFwiZG91YmxldmVydFwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDU1NjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJbXCIgfHwgZGVsaW0gPT09IFwiXFxcXGxicmFja1wiKSB7XG4gICAgdG9wID0gXCJcXHUyM2ExXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2EyXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EzXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJsYnJhY2tcIjtcbiAgICB2aWV3Qm94V2lkdGggPSA2Njc7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXVwiIHx8IGRlbGltID09PSBcIlxcXFxyYnJhY2tcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhNFwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhNVwiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhNlwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgICBzdmdMYWJlbCA9IFwicmJyYWNrXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBhXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTJcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTNcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxcbGNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA4XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTFcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTJcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxyZmxvb3JcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzBiXCIpIHtcbiAgICByZXBlYXQgPSB0b3AgPSBcIlxcdTIzYTVcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTZcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJmbG9vclwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDY2NztcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmNlaWxcIiB8fCBkZWxpbSA9PT0gXCJcXHUyMzA5XCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTRcIjtcbiAgICByZXBlYXQgPSBib3R0b20gPSBcIlxcdTIzYTVcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcInJjZWlsXCI7XG4gICAgdmlld0JveFdpZHRoID0gNjY3O1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIihcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbHBhcmVuXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzOWJcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzOWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzOWRcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gICAgc3ZnTGFiZWwgPSBcImxwYXJlblwiO1xuICAgIHZpZXdCb3hXaWR0aCA9IDg3NTtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCIpXCIgfHwgZGVsaW0gPT09IFwiXFxcXHJwYXJlblwiKSB7XG4gICAgdG9wID0gXCJcXHUyMzllXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyMzlmXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2EwXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICAgIHN2Z0xhYmVsID0gXCJycGFyZW5cIjtcbiAgICB2aWV3Qm94V2lkdGggPSA4NzU7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXHtcIiB8fCBkZWxpbSA9PT0gXCJcXFxcbGJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYTdcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYThcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYTlcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXH1cIiB8fCBkZWxpbSA9PT0gXCJcXFxccmJyYWNlXCIpIHtcbiAgICB0b3AgPSBcIlxcdTIzYWJcIjtcbiAgICBtaWRkbGUgPSBcIlxcdTIzYWNcIjtcbiAgICBib3R0b20gPSBcIlxcdTIzYWRcIjtcbiAgICByZXBlYXQgPSBcIlxcdTIzYWFcIjtcbiAgICBmb250ID0gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAoZGVsaW0gPT09IFwiXFxcXGxncm91cFwiIHx8IGRlbGltID09PSBcIlxcdTI3ZWVcIikge1xuICAgIHRvcCA9IFwiXFx1MjNhN1wiO1xuICAgIGJvdHRvbSA9IFwiXFx1MjNhOVwiO1xuICAgIHJlcGVhdCA9IFwiXFx1MjNhYVwiO1xuICAgIGZvbnQgPSBcIlNpemU0LVJlZ3VsYXJcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCJcXFxccmdyb3VwXCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlZlwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxsbW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMFwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2E3XCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2FkXCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IGVsc2UgaWYgKGRlbGltID09PSBcIlxcXFxybW91c3RhY2hlXCIgfHwgZGVsaW0gPT09IFwiXFx1MjNiMVwiKSB7XG4gICAgdG9wID0gXCJcXHUyM2FiXCI7XG4gICAgYm90dG9tID0gXCJcXHUyM2E5XCI7XG4gICAgcmVwZWF0ID0gXCJcXHUyM2FhXCI7XG4gICAgZm9udCA9IFwiU2l6ZTQtUmVndWxhclwiO1xuICB9IC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgZm91ciBzZWN0aW9uc1xuXG5cbiAgdmFyIHRvcE1ldHJpY3MgPSBnZXRNZXRyaWNzKHRvcCwgZm9udCwgbW9kZSk7XG4gIHZhciB0b3BIZWlnaHRUb3RhbCA9IHRvcE1ldHJpY3MuaGVpZ2h0ICsgdG9wTWV0cmljcy5kZXB0aDtcbiAgdmFyIHJlcGVhdE1ldHJpY3MgPSBnZXRNZXRyaWNzKHJlcGVhdCwgZm9udCwgbW9kZSk7XG4gIHZhciByZXBlYXRIZWlnaHRUb3RhbCA9IHJlcGVhdE1ldHJpY3MuaGVpZ2h0ICsgcmVwZWF0TWV0cmljcy5kZXB0aDtcbiAgdmFyIGJvdHRvbU1ldHJpY3MgPSBnZXRNZXRyaWNzKGJvdHRvbSwgZm9udCwgbW9kZSk7XG4gIHZhciBib3R0b21IZWlnaHRUb3RhbCA9IGJvdHRvbU1ldHJpY3MuaGVpZ2h0ICsgYm90dG9tTWV0cmljcy5kZXB0aDtcbiAgdmFyIG1pZGRsZUhlaWdodFRvdGFsID0gMDtcbiAgdmFyIG1pZGRsZUZhY3RvciA9IDE7XG5cbiAgaWYgKG1pZGRsZSAhPT0gbnVsbCkge1xuICAgIHZhciBtaWRkbGVNZXRyaWNzID0gZ2V0TWV0cmljcyhtaWRkbGUsIGZvbnQsIG1vZGUpO1xuICAgIG1pZGRsZUhlaWdodFRvdGFsID0gbWlkZGxlTWV0cmljcy5oZWlnaHQgKyBtaWRkbGVNZXRyaWNzLmRlcHRoO1xuICAgIG1pZGRsZUZhY3RvciA9IDI7IC8vIHJlcGVhdCBzeW1tZXRyaWNhbGx5IGFib3ZlIGFuZCBiZWxvdyBtaWRkbGVcbiAgfSAvLyBDYWxjdWxhdGUgdGhlIG1pbmltYWwgaGVpZ2h0IHRoYXQgdGhlIGRlbGltaXRlciBjYW4gaGF2ZS5cbiAgLy8gSXQgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHRvcCwgYm90dG9tLCBhbmQgb3B0aW9uYWwgbWlkZGxlIGNvbWJpbmVkLlxuXG5cbiAgdmFyIG1pbkhlaWdodCA9IHRvcEhlaWdodFRvdGFsICsgYm90dG9tSGVpZ2h0VG90YWwgKyBtaWRkbGVIZWlnaHRUb3RhbDsgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgcmVwZWF0IHN5bWJvbCB3ZSB3aWxsIG5lZWRcblxuICB2YXIgcmVwZWF0Q291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGhlaWdodFRvdGFsIC0gbWluSGVpZ2h0KSAvIChtaWRkbGVGYWN0b3IgKiByZXBlYXRIZWlnaHRUb3RhbCkpKTsgLy8gQ29tcHV0ZSB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkZWxpbWl0ZXIgaW5jbHVkaW5nIGFsbCB0aGUgc3ltYm9sc1xuXG4gIHZhciByZWFsSGVpZ2h0VG90YWwgPSBtaW5IZWlnaHQgKyByZXBlYXRDb3VudCAqIG1pZGRsZUZhY3RvciAqIHJlcGVhdEhlaWdodFRvdGFsOyAvLyBUaGUgY2VudGVyIG9mIHRoZSBkZWxpbWl0ZXIgaXMgcGxhY2VkIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGF4aXMuIE5vdGVcbiAgLy8gdGhhdCBpbiB0aGlzIGNvbnRleHQsIFwiY2VudGVyXCIgbWVhbnMgdGhhdCB0aGUgZGVsaW1pdGVyIHNob3VsZCBiZVxuICAvLyBjZW50ZXJlZCBhcm91bmQgdGhlIGF4aXMgaW4gdGhlIGN1cnJlbnQgc3R5bGUsIHdoaWxlIG5vcm1hbGx5IGl0IGlzXG4gIC8vIGNlbnRlcmVkIGFyb3VuZCB0aGUgYXhpcyBpbiB0ZXh0c3R5bGUuXG5cbiAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcblxuICBpZiAoY2VudGVyKSB7XG4gICAgYXhpc0hlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB9IC8vIENhbGN1bGF0ZSB0aGUgZGVwdGhcblxuXG4gIHZhciBkZXB0aCA9IHJlYWxIZWlnaHRUb3RhbCAvIDIgLSBheGlzSGVpZ2h0OyAvLyBOb3csIHdlIHN0YXJ0IGJ1aWxkaW5nIHRoZSBwaWVjZXMgdGhhdCB3aWxsIGdvIGludG8gdGhlIHZsaXN0XG4gIC8vIEtlZXAgYSBsaXN0IG9mIHRoZSBwaWVjZXMgb2YgdGhlIHN0YWNrZWQgZGVsaW1pdGVyXG5cbiAgdmFyIHN0YWNrID0gW107XG5cbiAgaWYgKHN2Z0xhYmVsLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJbnN0ZWFkIG9mIHN0YWNraW5nIGdseXBocywgY3JlYXRlIGEgc2luZ2xlIFNWRy5cbiAgICAvLyBUaGlzIGV2YWRlcyBicm93c2VyIHByb2JsZW1zIHdpdGggaW1wcmVjaXNlIHBvc2l0aW9uaW5nIG9mIHNwYW5zLlxuICAgIHZhciBtaWRIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsO1xuICAgIHZhciB2aWV3Qm94SGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0VG90YWwgKiAxMDAwKTtcbiAgICB2YXIgcGF0aFN0ciA9IHRhbGxEZWxpbShzdmdMYWJlbCwgTWF0aC5yb3VuZChtaWRIZWlnaHQgKiAxMDAwKSk7XG4gICAgdmFyIHBhdGggPSBuZXcgUGF0aE5vZGUoc3ZnTGFiZWwsIHBhdGhTdHIpO1xuICAgIHZhciB3aWR0aCA9ICh2aWV3Qm94V2lkdGggLyAxMDAwKS50b0ZpeGVkKDMpICsgXCJlbVwiO1xuICAgIHZhciBoZWlnaHQgPSAodmlld0JveEhlaWdodCAvIDEwMDApLnRvRml4ZWQoMykgKyBcImVtXCI7XG4gICAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoXSwge1xuICAgICAgXCJ3aWR0aFwiOiB3aWR0aCxcbiAgICAgIFwiaGVpZ2h0XCI6IGhlaWdodCxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCBcIiArIHZpZXdCb3hXaWR0aCArIFwiIFwiICsgdmlld0JveEhlaWdodFxuICAgIH0pO1xuICAgIHZhciB3cmFwcGVyID0gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW10sIFtzdmddLCBvcHRpb25zKTtcbiAgICB3cmFwcGVyLmhlaWdodCA9IHZpZXdCb3hIZWlnaHQgLyAxMDAwO1xuICAgIHdyYXBwZXIuc3R5bGUud2lkdGggPSB3aWR0aDtcbiAgICB3cmFwcGVyLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICBzdGFjay5wdXNoKHtcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogd3JhcHBlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0YWNrIGdseXBoc1xuICAgIC8vIFN0YXJ0IGJ5IGFkZGluZyB0aGUgYm90dG9tIHN5bWJvbFxuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbihib3R0b20sIGZvbnQsIG1vZGUpKTtcbiAgICBzdGFjay5wdXNoKGxhcCk7IC8vIG92ZXJsYXBcblxuICAgIGlmIChtaWRkbGUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBtaWRkbGUgc2VjdGlvbiB3aWxsIGJlIGFuIFNWRy4gTWFrZSBpdCBhbiBleHRyYSAwLjAxNmVtIHRhbGwuXG4gICAgICAvLyBXZSdsbCBvdmVybGFwIGJ5IDAuMDA4ZW0gYXQgdG9wIGFuZCBib3R0b20uXG4gICAgICB2YXIgaW5uZXJIZWlnaHQgPSByZWFsSGVpZ2h0VG90YWwgLSB0b3BIZWlnaHRUb3RhbCAtIGJvdHRvbUhlaWdodFRvdGFsICsgMiAqIGxhcEluRW1zO1xuICAgICAgc3RhY2sucHVzaChtYWtlSW5uZXIocmVwZWF0LCBpbm5lckhlaWdodCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgbWlkZGxlIGJpdCwgd2UgbmVlZCB0aGUgbWlkZGxlIHBhcnQgYW5kIHR3byByZXBlYXRlZFxuICAgICAgLy8gc2VjdGlvbnNcbiAgICAgIHZhciBfaW5uZXJIZWlnaHQgPSAocmVhbEhlaWdodFRvdGFsIC0gdG9wSGVpZ2h0VG90YWwgLSBib3R0b21IZWlnaHRUb3RhbCAtIG1pZGRsZUhlaWdodFRvdGFsKSAvIDIgKyAyICogbGFwSW5FbXM7XG5cbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7IC8vIE5vdyBpbnNlcnQgdGhlIG1pZGRsZSBvZiB0aGUgYnJhY2UuXG5cbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3BhbihtaWRkbGUsIGZvbnQsIG1vZGUpKTtcbiAgICAgIHN0YWNrLnB1c2gobGFwKTtcbiAgICAgIHN0YWNrLnB1c2gobWFrZUlubmVyKHJlcGVhdCwgX2lubmVySGVpZ2h0LCBvcHRpb25zKSk7XG4gICAgfSAvLyBBZGQgdGhlIHRvcCBzeW1ib2xcblxuXG4gICAgc3RhY2sucHVzaChsYXApO1xuICAgIHN0YWNrLnB1c2gobWFrZUdseXBoU3Bhbih0b3AsIGZvbnQsIG1vZGUpKTtcbiAgfSAvLyBGaW5hbGx5LCBidWlsZCB0aGUgdmxpc3RcblxuXG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdCYXNlU3R5bGUoU3R5bGUkMS5URVhUKTtcbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgcG9zaXRpb25EYXRhOiBkZXB0aCxcbiAgICBjaGlsZHJlbjogc3RhY2tcbiAgfSwgbmV3T3B0aW9ucyk7XG4gIHJldHVybiBzdHlsZVdyYXAoYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiZGVsaW1zaXppbmdcIiwgXCJtdWx0XCJdLCBbaW5uZXJdLCBuZXdPcHRpb25zKSwgU3R5bGUkMS5URVhULCBvcHRpb25zLCBjbGFzc2VzKTtcbn07IC8vIEFsbCBzdXJkcyBoYXZlIDAuMDhlbSBwYWRkaW5nIGFib3ZlIHRoZSB2aW5jdWx1bSBpbnNpZGUgdGhlIFNWRy5cbi8vIFRoYXQga2VlcHMgYnJvd3NlciBzcGFuIGhlaWdodCByb3VuZGluZyBlcnJvciBmcm9tIHBpbmNoaW5nIHRoZSBsaW5lLlxuXG5cbnZhciB2YlBhZCA9IDgwOyAvLyBwYWRkaW5nIGFib3ZlIHRoZSBzdXJkLCBtZWFzdXJlZCBpbnNpZGUgdGhlIHZpZXdCb3guXG5cbnZhciBlbVBhZCA9IDAuMDg7IC8vIHBhZGRpbmcsIGluIGVtcywgbWVhc3VyZWQgaW4gdGhlIGRvY3VtZW50LlxuXG52YXIgc3FydFN2ZyA9IGZ1bmN0aW9uIHNxcnRTdmcoc3FydE5hbWUsIGhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucykge1xuICB2YXIgcGF0aCA9IHNxcnRQYXRoKHNxcnROYW1lLCBleHRyYVZpbmN1bHVtLCB2aWV3Qm94SGVpZ2h0KTtcbiAgdmFyIHBhdGhOb2RlID0gbmV3IFBhdGhOb2RlKHNxcnROYW1lLCBwYXRoKTtcbiAgdmFyIHN2ZyA9IG5ldyBTdmdOb2RlKFtwYXRoTm9kZV0sIHtcbiAgICAvLyBOb3RlOiAxMDAwOjEgcmF0aW8gb2Ygdmlld0JveCB0byBkb2N1bWVudCBlbSB3aWR0aC5cbiAgICBcIndpZHRoXCI6IFwiNDAwZW1cIixcbiAgICBcImhlaWdodFwiOiBtYWtlRW0oaGVpZ2h0KSxcbiAgICBcInZpZXdCb3hcIjogXCIwIDAgNDAwMDAwIFwiICsgdmlld0JveEhlaWdodCxcbiAgICBcInByZXNlcnZlQXNwZWN0UmF0aW9cIjogXCJ4TWluWU1pbiBzbGljZVwiXG4gIH0pO1xuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVN2Z1NwYW4oW1wiaGlkZS10YWlsXCJdLCBbc3ZnXSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBNYWtlIGEgc3FydCBpbWFnZSBvZiB0aGUgZ2l2ZW4gaGVpZ2h0LFxuICovXG5cblxudmFyIG1ha2VTcXJ0SW1hZ2UgPSBmdW5jdGlvbiBtYWtlU3FydEltYWdlKGhlaWdodCwgb3B0aW9ucykge1xuICAvLyBEZWZpbmUgYSBuZXdPcHRpb25zIHRoYXQgcmVtb3ZlcyB0aGUgZWZmZWN0IG9mIHNpemUgY2hhbmdlcyBzdWNoIGFzIFxcSHVnZS5cbiAgLy8gV2UgZG9uJ3QgcGljayBkaWZmZXJlbnQgYSBoZWlnaHQgc3VyZCBmb3IgXFxIdWdlLiBGb3IgaXQsIHdlIHNjYWxlIHVwLlxuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpOyAvLyBQaWNrIHRoZSBkZXNpcmVkIHN1cmQgZ2x5cGggZnJvbSBhIHNlcXVlbmNlIG9mIHN1cmRzLlxuXG4gIHZhciBkZWxpbSA9IHRyYXZlcnNlU2VxdWVuY2UoXCJcXFxcc3VyZFwiLCBoZWlnaHQgKiBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyLCBzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UsIG5ld09wdGlvbnMpO1xuICB2YXIgc2l6ZU11bHRpcGxpZXIgPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyOyAvLyBkZWZhdWx0XG4gIC8vIFRoZSBzdGFuZGFyZCBzcXJ0IFNWR3MgZWFjaCBoYXZlIGEgMC4wNGVtIHRoaWNrIHZpbmN1bHVtLlxuICAvLyBJZiBTZXR0aW5ncy5taW5SdWxlVGhpY2tuZXNzIGlzIGxhcmdlciB0aGFuIHRoYXQsIHdlIGFkZCBleHRyYVZpbmN1bHVtLlxuXG4gIHZhciBleHRyYVZpbmN1bHVtID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC0gb3B0aW9ucy5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKTsgLy8gQ3JlYXRlIGEgc3BhbiBjb250YWluaW5nIGFuIFNWRyBpbWFnZSBvZiBhIHNxcnQgc3ltYm9sLlxuXG4gIHZhciBzcGFuO1xuICB2YXIgc3BhbkhlaWdodCA9IDA7XG4gIHZhciB0ZXhIZWlnaHQgPSAwO1xuICB2YXIgdmlld0JveEhlaWdodCA9IDA7XG4gIHZhciBhZHZhbmNlV2lkdGg7IC8vIFdlIGNyZWF0ZSB2aWV3Qm94ZXMgd2l0aCA4MCB1bml0cyBvZiBcInBhZGRpbmdcIiBhYm92ZSBlYWNoIHN1cmQuXG4gIC8vIFRoZW4gYnJvd3NlciByb3VuZGluZyBlcnJvciBvbiB0aGUgcGFyZW50IHNwYW4gaGVpZ2h0IHdpbGwgbm90XG4gIC8vIGVuY3JvYWNoIG9uIHRoZSBpbmsgb2YgdGhlIHZpbmN1bHVtLiBCdXQgdGhhdCBwYWRkaW5nIGlzIG5vdFxuICAvLyBpbmNsdWRlZCBpbiB0aGUgVGVYLWxpa2UgYGhlaWdodGAgdXNlZCBmb3IgY2FsY3VsYXRpb24gb2ZcbiAgLy8gdmVydGljYWwgYWxpZ25tZW50LiBTbyB0ZXhIZWlnaHQgPSBzcGFuLmhlaWdodCA8IHNwYW4uc3R5bGUuaGVpZ2h0LlxuXG4gIGlmIChkZWxpbS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICAvLyBHZXQgYW4gU1ZHIHRoYXQgaXMgZGVyaXZlZCBmcm9tIGdseXBoIFUrMjIxQSBpbiBmb250IEthVGVYLU1haW4uXG4gICAgLy8gMTAwMCB1bml0IG5vcm1hbCBnbHlwaCBoZWlnaHQuXG4gICAgdmlld0JveEhlaWdodCA9IDEwMDAgKyAxMDAwICogZXh0cmFWaW5jdWx1bSArIHZiUGFkO1xuXG4gICAgaWYgKGhlaWdodCA8IDEuMCkge1xuICAgICAgc2l6ZU11bHRpcGxpZXIgPSAxLjA7IC8vIG1pbWljIGEgXFx0ZXh0Zm9udCByYWRpY2FsXG4gICAgfSBlbHNlIGlmIChoZWlnaHQgPCAxLjQpIHtcbiAgICAgIHNpemVNdWx0aXBsaWVyID0gMC43OyAvLyBtaW1pYyBhIFxcc2NyaXB0Zm9udCByYWRpY2FsXG4gICAgfVxuXG4gICAgc3BhbkhlaWdodCA9ICgxLjAgKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgdGV4SGVpZ2h0ID0gKDEuMDAgKyBleHRyYVZpbmN1bHVtKSAvIHNpemVNdWx0aXBsaWVyO1xuICAgIHNwYW4gPSBzcXJ0U3ZnKFwic3FydE1haW5cIiwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMC44NTNlbVwiO1xuICAgIGFkdmFuY2VXaWR0aCA9IDAuODMzIC8gc2l6ZU11bHRpcGxpZXI7IC8vIGZyb20gdGhlIGZvbnQuXG4gIH0gZWxzZSBpZiAoZGVsaW0udHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgLy8gVGhlc2UgU1ZHcyBjb21lIGZyb20gZm9udHM6IEthVGVYX1NpemUxLCBfU2l6ZTIsIGV0Yy5cbiAgICB2aWV3Qm94SGVpZ2h0ID0gKDEwMDAgKyB2YlBhZCkgKiBzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV07XG4gICAgdGV4SGVpZ2h0ID0gKHNpemVUb01heEhlaWdodFtkZWxpbS5zaXplXSArIGV4dHJhVmluY3VsdW0pIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbkhlaWdodCA9IChzaXplVG9NYXhIZWlnaHRbZGVsaW0uc2l6ZV0gKyBleHRyYVZpbmN1bHVtICsgZW1QYWQpIC8gc2l6ZU11bHRpcGxpZXI7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0U2l6ZVwiICsgZGVsaW0uc2l6ZSwgc3BhbkhlaWdodCwgdmlld0JveEhlaWdodCwgZXh0cmFWaW5jdWx1bSwgb3B0aW9ucyk7XG4gICAgc3Bhbi5zdHlsZS5taW5XaWR0aCA9IFwiMS4wMmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wIC8gc2l6ZU11bHRpcGxpZXI7IC8vIDEuMCBmcm9tIHRoZSBmb250LlxuICB9IGVsc2Uge1xuICAgIC8vIFRhbGwgc3FydC4gSW4gVGVYLCB0aGlzIHdvdWxkIGJlIHN0YWNrZWQgdXNpbmcgbXVsdGlwbGUgZ2x5cGhzLlxuICAgIC8vIFdlJ2xsIHVzZSBhIHNpbmdsZSBTVkcgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy5cbiAgICBzcGFuSGVpZ2h0ID0gaGVpZ2h0ICsgZXh0cmFWaW5jdWx1bSArIGVtUGFkO1xuICAgIHRleEhlaWdodCA9IGhlaWdodCArIGV4dHJhVmluY3VsdW07XG4gICAgdmlld0JveEhlaWdodCA9IE1hdGguZmxvb3IoMTAwMCAqIGhlaWdodCArIGV4dHJhVmluY3VsdW0pICsgdmJQYWQ7XG4gICAgc3BhbiA9IHNxcnRTdmcoXCJzcXJ0VGFsbFwiLCBzcGFuSGVpZ2h0LCB2aWV3Qm94SGVpZ2h0LCBleHRyYVZpbmN1bHVtLCBvcHRpb25zKTtcbiAgICBzcGFuLnN0eWxlLm1pbldpZHRoID0gXCIwLjc0MmVtXCI7XG4gICAgYWR2YW5jZVdpZHRoID0gMS4wNTY7XG4gIH1cblxuICBzcGFuLmhlaWdodCA9IHRleEhlaWdodDtcbiAgc3Bhbi5zdHlsZS5oZWlnaHQgPSBtYWtlRW0oc3BhbkhlaWdodCk7XG4gIHJldHVybiB7XG4gICAgc3BhbixcbiAgICBhZHZhbmNlV2lkdGgsXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhY3R1YWwgbGluZSB3aWR0aC5cbiAgICAvLyBUaGlzIGFjdHVhbGx5IHNob3VsZCBkZXBlbmQgb24gdGhlIGNob3NlbiBmb250IC0tIGUuZy4gXFxib2xkbWF0aFxuICAgIC8vIHNob3VsZCB1c2UgdGhlIHRoaWNrZXIgc3VyZCBzeW1ib2xzIGZyb20gZS5nLiBLYVRlWF9NYWluLUJvbGQsIGFuZFxuICAgIC8vIGhhdmUgdGhpY2tlciBydWxlcy5cbiAgICBydWxlV2lkdGg6IChvcHRpb25zLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MgKyBleHRyYVZpbmN1bHVtKSAqIHNpemVNdWx0aXBsaWVyXG4gIH07XG59OyAvLyBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgZGVsaW1pdGVycywgZGVsaW1pdGVycyB0aGF0IHN0YWNrIHdoZW4gdGhleSBiZWNvbWVcbi8vIHRvbyBsYXJnZVxuXG5cbnZhciBzdGFja0xhcmdlRGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiXFxcXHN1cmRcIl07IC8vIGRlbGltaXRlcnMgdGhhdCBhbHdheXMgc3RhY2tcblxudmFyIHN0YWNrQWx3YXlzRGVsaW1pdGVycyA9IFtcIlxcXFx1cGFycm93XCIsIFwiXFxcXGRvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcInxcIiwgXCJcXFxcfFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXFZlcnRcIiwgXCJcXFxcbHZlcnRcIiwgXCJcXFxccnZlcnRcIiwgXCJcXFxcbFZlcnRcIiwgXCJcXFxcclZlcnRcIiwgXCJcXFxcbGdyb3VwXCIsIFwiXFxcXHJncm91cFwiLCBcIlxcdTI3ZWVcIiwgXCJcXHUyN2VmXCIsIFwiXFxcXGxtb3VzdGFjaGVcIiwgXCJcXFxccm1vdXN0YWNoZVwiLCBcIlxcdTIzYjBcIiwgXCJcXHUyM2IxXCJdOyAvLyBhbmQgZGVsaW1pdGVycyB0aGF0IG5ldmVyIHN0YWNrXG5cbnZhciBzdGFja05ldmVyRGVsaW1pdGVycyA9IFtcIjxcIiwgXCI+XCIsIFwiXFxcXGxhbmdsZVwiLCBcIlxcXFxyYW5nbGVcIiwgXCIvXCIsIFwiXFxcXGJhY2tzbGFzaFwiLCBcIlxcXFxsdFwiLCBcIlxcXFxndFwiXTsgLy8gTWV0cmljcyBvZiB0aGUgZGlmZmVyZW50IHNpemVzLiBGb3VuZCBieSBsb29raW5nIGF0IFRlWCdzIG91dHB1dCBvZlxuLy8gJFxcYmlnbHwgLy8gXFxCaWdsfCBcXGJpZ2dsfCBcXEJpZ2dsfCBcXHNob3dsaXN0cyRcbi8vIFVzZWQgdG8gY3JlYXRlIHN0YWNrZWQgZGVsaW1pdGVycyBvZiBhcHByb3ByaWF0ZSBzaXplcyBpbiBtYWtlU2l6ZWREZWxpbS5cblxudmFyIHNpemVUb01heEhlaWdodCA9IFswLCAxLjIsIDEuOCwgMi40LCAzLjBdO1xuLyoqXG4gKiBVc2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiBhIHNwZWNpZmljIHNpemUsIHdoZXJlIGBzaXplYCBpcyAxLCAyLCAzLCBvciA0LlxuICovXG5cbnZhciBtYWtlU2l6ZWREZWxpbSA9IGZ1bmN0aW9uIG1ha2VTaXplZERlbGltKGRlbGltLCBzaXplLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIC8vIDwgYW5kID4gdHVybiBpbnRvIFxcbGFuZ2xlIGFuZCBcXHJhbmdsZSBpbiBkZWxpbWl0ZXJzXG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBTaXplZCBkZWxpbWl0ZXJzIGFyZSBuZXZlciBjZW50ZXJlZC5cblxuXG4gIGlmICh1dGlscy5jb250YWlucyhzdGFja0xhcmdlRGVsaW1pdGVycywgZGVsaW0pIHx8IHV0aWxzLmNvbnRhaW5zKHN0YWNrTmV2ZXJEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICByZXR1cm4gbWFrZUxhcmdlRGVsaW0oZGVsaW0sIHNpemUsIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmICh1dGlscy5jb250YWlucyhzdGFja0Fsd2F5c0RlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHJldHVybiBtYWtlU3RhY2tlZERlbGltKGRlbGltLCBzaXplVG9NYXhIZWlnaHRbc2l6ZV0sIGZhbHNlLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIklsbGVnYWwgZGVsaW1pdGVyOiAnXCIgKyBkZWxpbSArIFwiJ1wiKTtcbiAgfVxufTtcbi8qKlxuICogVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCBzZXF1ZW5jZXMgb2YgZGVsaW1pdGVyIHNpemVzIHRoYXQgdGhlIGRlbGltaXRlcnNcbiAqIGZvbGxvdyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgZGVsaW1pdGVyLiBUaGlzIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBjdXN0b21cbiAqIHNpemVkIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY3JlYXRlIGEgc21hbGwsIGxhcmdlLCBvciBzdGFja2VkXG4gKiBkZWxpbWl0ZXIuXG4gKlxuICogSW4gcmVhbCBUZVgsIHRoZXNlIHNlcXVlbmNlcyBhcmVuJ3QgZXhwbGljaXRseSBkZWZpbmVkLCBidXQgYXJlIGluc3RlYWRcbiAqIGRlZmluZWQgaW5zaWRlIHRoZSBmb250IG1ldHJpY3MuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlIHNlcXVlbmNlcyB0aGF0XG4gKiBhcmUgcG9zc2libGUgZm9yIHRoZSBkZWxpbWl0ZXJzIHRoYXQgVGVYIGRlZmluZXMsIGl0IGlzIGVhc2llciB0byBqdXN0IGVuY29kZVxuICogdGhlbSBleHBsaWNpdGx5IGhlcmUuXG4gKi9cblxuXG4vLyBEZWxpbWl0ZXJzIHRoYXQgbmV2ZXIgc3RhY2sgdHJ5IHNtYWxsIGRlbGltaXRlcnMgYW5kIGxhcmdlIGRlbGltaXRlcnMgb25seVxudmFyIHN0YWNrTmV2ZXJEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDFcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAyXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogM1xufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDRcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgYWx3YXlzIHN0YWNrIHRyeSB0aGUgc21hbGwgZGVsaW1pdGVycyBmaXJzdCwgdGhlbiBzdGFja1xuXG52YXIgc3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSA9IFt7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuU0NSSVBUXG59LCB7XG4gIHR5cGU6IFwic21hbGxcIixcbiAgc3R5bGU6IFN0eWxlJDEuVEVYVFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dOyAvLyBEZWxpbWl0ZXJzIHRoYXQgc3RhY2sgd2hlbiBsYXJnZSB0cnkgdGhlIHNtYWxsIGFuZCB0aGVuIGxhcmdlIGRlbGltaXRlcnMsIGFuZFxuLy8gc3RhY2sgYWZ0ZXJ3YXJkc1xuXG52YXIgc3RhY2tMYXJnZURlbGltaXRlclNlcXVlbmNlID0gW3tcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRTQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5TQ1JJUFRcbn0sIHtcbiAgdHlwZTogXCJzbWFsbFwiLFxuICBzdHlsZTogU3R5bGUkMS5URVhUXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogMVxufSwge1xuICB0eXBlOiBcImxhcmdlXCIsXG4gIHNpemU6IDJcbn0sIHtcbiAgdHlwZTogXCJsYXJnZVwiLFxuICBzaXplOiAzXG59LCB7XG4gIHR5cGU6IFwibGFyZ2VcIixcbiAgc2l6ZTogNFxufSwge1xuICB0eXBlOiBcInN0YWNrXCJcbn1dO1xuLyoqXG4gKiBHZXQgdGhlIGZvbnQgdXNlZCBpbiBhIGRlbGltaXRlciBiYXNlZCBvbiB3aGF0IGtpbmQgb2YgZGVsaW1pdGVyIGl0IGlzLlxuICogVE9ETygjOTYzKSBVc2UgbW9yZSBzcGVjaWZpYyBmb250IGZhbWlseSByZXR1cm4gdHlwZSBvbmNlIHRoYXQgaXMgaW50cm9kdWNlZC5cbiAqL1xuXG52YXIgZGVsaW1UeXBlVG9Gb250ID0gZnVuY3Rpb24gZGVsaW1UeXBlVG9Gb250KHR5cGUpIHtcbiAgaWYgKHR5cGUudHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgcmV0dXJuIFwiTWFpbi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcImxhcmdlXCIpIHtcbiAgICByZXR1cm4gXCJTaXplXCIgKyB0eXBlLnNpemUgKyBcIi1SZWd1bGFyXCI7XG4gIH0gZWxzZSBpZiAodHlwZS50eXBlID09PSBcInN0YWNrXCIpIHtcbiAgICByZXR1cm4gXCJTaXplNC1SZWd1bGFyXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIHN1cHBvcnQgZm9yIGRlbGltIHR5cGUgJ1wiICsgdHlwZS50eXBlICsgXCInIGhlcmUuXCIpO1xuICB9XG59O1xuLyoqXG4gKiBUcmF2ZXJzZSBhIHNlcXVlbmNlIG9mIHR5cGVzIG9mIGRlbGltaXRlcnMgdG8gZGVjaWRlIHdoYXQga2luZCBvZiBkZWxpbWl0ZXJcbiAqIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGRlbGltaXRlciBvZiB0aGUgZ2l2ZW4gaGVpZ2h0K2RlcHRoLlxuICovXG5cblxudmFyIHRyYXZlcnNlU2VxdWVuY2UgPSBmdW5jdGlvbiB0cmF2ZXJzZVNlcXVlbmNlKGRlbGltLCBoZWlnaHQsIHNlcXVlbmNlLCBvcHRpb25zKSB7XG4gIC8vIEhlcmUsIHdlIGNob29zZSB0aGUgaW5kZXggd2Ugc2hvdWxkIHN0YXJ0IGF0IGluIHRoZSBzZXF1ZW5jZXMuIEluIHNtYWxsZXJcbiAgLy8gc2l6ZXMgKHdoaWNoIGNvcnJlc3BvbmQgdG8gbGFyZ2VyIG51bWJlcnMgaW4gc3R5bGUuc2l6ZSkgd2Ugc3RhcnQgZWFybGllclxuICAvLyBpbiB0aGUgc2VxdWVuY2UuIFRodXMsIHNjcmlwdHNjcmlwdCBzdGFydHMgYXQgaW5kZXggMy0zPTAsIHNjcmlwdCBzdGFydHNcbiAgLy8gYXQgaW5kZXggMy0yPTEsIHRleHQgc3RhcnRzIGF0IDMtMT0yLCBhbmQgZGlzcGxheSBzdGFydHMgYXQgbWluKDIsMy0wKT0yXG4gIHZhciBzdGFydCA9IE1hdGgubWluKDIsIDMgLSBvcHRpb25zLnN0eWxlLnNpemUpO1xuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNlcXVlbmNlW2ldLnR5cGUgPT09IFwic3RhY2tcIikge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgZGVsaW1pdGVyLCBzbyB3ZSBqdXN0IGJyZWFrIHRoZSBsb29wIG5vdy5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBtZXRyaWNzID0gZ2V0TWV0cmljcyhkZWxpbSwgZGVsaW1UeXBlVG9Gb250KHNlcXVlbmNlW2ldKSwgXCJtYXRoXCIpO1xuICAgIHZhciBoZWlnaHREZXB0aCA9IG1ldHJpY3MuaGVpZ2h0ICsgbWV0cmljcy5kZXB0aDsgLy8gU21hbGwgZGVsaW1pdGVycyBhcmUgc2NhbGVkIGRvd24gdmVyc2lvbnMgb2YgdGhlIHNhbWUgZm9udCwgc28gd2VcbiAgICAvLyBhY2NvdW50IGZvciB0aGUgc3R5bGUgY2hhbmdlIHNpemUuXG5cbiAgICBpZiAoc2VxdWVuY2VbaV0udHlwZSA9PT0gXCJzbWFsbFwiKSB7XG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVN0eWxlKHNlcXVlbmNlW2ldLnN0eWxlKTtcbiAgICAgIGhlaWdodERlcHRoICo9IG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgfSAvLyBDaGVjayBpZiB0aGUgZGVsaW1pdGVyIGF0IHRoaXMgc2l6ZSB3b3JrcyBmb3IgdGhlIGdpdmVuIGhlaWdodC5cblxuXG4gICAgaWYgKGhlaWdodERlcHRoID4gaGVpZ2h0KSB7XG4gICAgICByZXR1cm4gc2VxdWVuY2VbaV07XG4gICAgfVxuICB9IC8vIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIHJldHVybiB0aGUgbGFzdCBzZXF1ZW5jZSBlbGVtZW50LlxuXG5cbiAgcmV0dXJuIHNlcXVlbmNlW3NlcXVlbmNlLmxlbmd0aCAtIDFdO1xufTtcbi8qKlxuICogTWFrZSBhIGRlbGltaXRlciBvZiBhIGdpdmVuIGhlaWdodCtkZXB0aCwgd2l0aCBvcHRpb25hbCBjZW50ZXJpbmcuIEhlcmUsIHdlXG4gKiB0cmF2ZXJzZSB0aGUgc2VxdWVuY2VzLCBhbmQgY3JlYXRlIGEgZGVsaW1pdGVyIHRoYXQgdGhlIHNlcXVlbmNlIHRlbGxzIHVzIHRvLlxuICovXG5cblxudmFyIG1ha2VDdXN0b21TaXplZERlbGltID0gZnVuY3Rpb24gbWFrZUN1c3RvbVNpemVkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKSB7XG4gIGlmIChkZWxpbSA9PT0gXCI8XCIgfHwgZGVsaW0gPT09IFwiXFxcXGx0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOFwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxsYW5nbGVcIjtcbiAgfSBlbHNlIGlmIChkZWxpbSA9PT0gXCI+XCIgfHwgZGVsaW0gPT09IFwiXFxcXGd0XCIgfHwgZGVsaW0gPT09IFwiXFx1MjdlOVwiKSB7XG4gICAgZGVsaW0gPSBcIlxcXFxyYW5nbGVcIjtcbiAgfSAvLyBEZWNpZGUgd2hhdCBzZXF1ZW5jZSB0byB1c2VcblxuXG4gIHZhciBzZXF1ZW5jZTtcblxuICBpZiAodXRpbHMuY29udGFpbnMoc3RhY2tOZXZlckRlbGltaXRlcnMsIGRlbGltKSkge1xuICAgIHNlcXVlbmNlID0gc3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlO1xuICB9IGVsc2UgaWYgKHV0aWxzLmNvbnRhaW5zKHN0YWNrTGFyZ2VEZWxpbWl0ZXJzLCBkZWxpbSkpIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrTGFyZ2VEZWxpbWl0ZXJTZXF1ZW5jZTtcbiAgfSBlbHNlIHtcbiAgICBzZXF1ZW5jZSA9IHN0YWNrQWx3YXlzRGVsaW1pdGVyU2VxdWVuY2U7XG4gIH0gLy8gTG9vayB0aHJvdWdoIHRoZSBzZXF1ZW5jZVxuXG5cbiAgdmFyIGRlbGltVHlwZSA9IHRyYXZlcnNlU2VxdWVuY2UoZGVsaW0sIGhlaWdodCwgc2VxdWVuY2UsIG9wdGlvbnMpOyAvLyBHZXQgdGhlIGRlbGltaXRlciBmcm9tIGZvbnQgZ2x5cGhzLlxuICAvLyBEZXBlbmRpbmcgb24gdGhlIHNlcXVlbmNlIGVsZW1lbnQgd2UgZGVjaWRlZCBvbiwgY2FsbCB0aGVcbiAgLy8gYXBwcm9wcmlhdGUgZnVuY3Rpb24uXG5cbiAgaWYgKGRlbGltVHlwZS50eXBlID09PSBcInNtYWxsXCIpIHtcbiAgICByZXR1cm4gbWFrZVNtYWxsRGVsaW0oZGVsaW0sIGRlbGltVHlwZS5zdHlsZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlIGlmIChkZWxpbVR5cGUudHlwZSA9PT0gXCJsYXJnZVwiKSB7XG4gICAgcmV0dXJuIG1ha2VMYXJnZURlbGltKGRlbGltLCBkZWxpbVR5cGUuc2l6ZSwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgfSBlbHNlXG4gICAgLyogaWYgKGRlbGltVHlwZS50eXBlID09PSBcInN0YWNrXCIpICovXG4gICAge1xuICAgICAgcmV0dXJuIG1ha2VTdGFja2VkRGVsaW0oZGVsaW0sIGhlaWdodCwgY2VudGVyLCBvcHRpb25zLCBtb2RlLCBjbGFzc2VzKTtcbiAgICB9XG59O1xuLyoqXG4gKiBNYWtlIGEgZGVsaW1pdGVyIGZvciB1c2Ugd2l0aCBgXFxsZWZ0YCBhbmQgYFxccmlnaHRgLCBnaXZlbiBhIGhlaWdodCBhbmQgZGVwdGhcbiAqIG9mIGFuIGV4cHJlc3Npb24gdGhhdCB0aGUgZGVsaW1pdGVycyBzdXJyb3VuZC5cbiAqL1xuXG5cbnZhciBtYWtlTGVmdFJpZ2h0RGVsaW0gPSBmdW5jdGlvbiBtYWtlTGVmdFJpZ2h0RGVsaW0oZGVsaW0sIGhlaWdodCwgZGVwdGgsIG9wdGlvbnMsIG1vZGUsIGNsYXNzZXMpIHtcbiAgLy8gV2UgYWx3YXlzIGNlbnRlciBcXGxlZnQvXFxyaWdodCBkZWxpbWl0ZXJzLCBzbyB0aGUgYXhpcyBpcyBhbHdheXMgc2hpZnRlZFxuICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0ICogb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gVGFrZW4gZnJvbSBUZVggc291cmNlLCB0ZXgud2ViLCBmdW5jdGlvbiBtYWtlX2xlZnRfcmlnaHRcblxuICB2YXIgZGVsaW1pdGVyRmFjdG9yID0gOTAxO1xuICB2YXIgZGVsaW1pdGVyRXh0ZW5kID0gNS4wIC8gb3B0aW9ucy5mb250TWV0cmljcygpLnB0UGVyRW07XG4gIHZhciBtYXhEaXN0RnJvbUF4aXMgPSBNYXRoLm1heChoZWlnaHQgLSBheGlzSGVpZ2h0LCBkZXB0aCArIGF4aXNIZWlnaHQpO1xuICB2YXIgdG90YWxIZWlnaHQgPSBNYXRoLm1heCggLy8gSW4gcmVhbCBUZVgsIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB1c2luZyBpbnRlZ3JhbCB2YWx1ZXMgd2hpY2ggYXJlXG4gIC8vIDY1NTM2IHBlciBwdCwgb3IgNjU1MzYwIHBlciBlbS4gU28sIHRoZSBkaXZpc2lvbiBoZXJlIHRydW5jYXRlcyBpblxuICAvLyBUZVggYnV0IGRvZXNuJ3QgaGVyZSwgcHJvZHVjaW5nIGRpZmZlcmVudCByZXN1bHRzLiBJZiB3ZSB3YW50ZWQgdG9cbiAgLy8gZXhhY3RseSBtYXRjaCBUZVgncyBjYWxjdWxhdGlvbiwgd2UgY291bGQgZG9cbiAgLy8gICBNYXRoLmZsb29yKDY1NTM2MCAqIG1heERpc3RGcm9tQXhpcyAvIDUwMCkgKlxuICAvLyAgICBkZWxpbWl0ZXJGYWN0b3IgLyA2NTUzNjBcbiAgLy8gKFRvIHNlZSB0aGUgZGlmZmVyZW5jZSwgY29tcGFyZVxuICAvLyAgICB4Xnt4XntcXGxlZnQoXFxydWxlezAuMWVtfXswLjY4ZW19XFxyaWdodCl9fVxuICAvLyBpbiBUZVggYW5kIEthVGVYKVxuICBtYXhEaXN0RnJvbUF4aXMgLyA1MDAgKiBkZWxpbWl0ZXJGYWN0b3IsIDIgKiBtYXhEaXN0RnJvbUF4aXMgLSBkZWxpbWl0ZXJFeHRlbmQpOyAvLyBGaW5hbGx5LCB3ZSBkZWZlciB0byBgbWFrZUN1c3RvbVNpemVkRGVsaW1gIHdpdGggb3VyIGNhbGN1bGF0ZWQgdG90YWxcbiAgLy8gaGVpZ2h0XG5cbiAgcmV0dXJuIG1ha2VDdXN0b21TaXplZERlbGltKGRlbGltLCB0b3RhbEhlaWdodCwgdHJ1ZSwgb3B0aW9ucywgbW9kZSwgY2xhc3Nlcyk7XG59O1xuXG52YXIgZGVsaW1pdGVyID0ge1xuICBzcXJ0SW1hZ2U6IG1ha2VTcXJ0SW1hZ2UsXG4gIHNpemVkRGVsaW06IG1ha2VTaXplZERlbGltLFxuICBzaXplVG9NYXhIZWlnaHQ6IHNpemVUb01heEhlaWdodCxcbiAgY3VzdG9tU2l6ZWREZWxpbTogbWFrZUN1c3RvbVNpemVkRGVsaW0sXG4gIGxlZnRSaWdodERlbGltOiBtYWtlTGVmdFJpZ2h0RGVsaW1cbn07XG5cbi8vIEV4dHJhIGRhdGEgbmVlZGVkIGZvciB0aGUgZGVsaW1pdGVyIGhhbmRsZXIgZG93biBiZWxvd1xudmFyIGRlbGltaXRlclNpemVzID0ge1xuICBcIlxcXFxiaWdsXCI6IHtcbiAgICBtY2xhc3M6IFwibW9wZW5cIixcbiAgICBzaXplOiAxXG4gIH0sXG4gIFwiXFxcXEJpZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ2xcIjoge1xuICAgIG1jbGFzczogXCJtb3BlblwiLFxuICAgIHNpemU6IDRcbiAgfSxcbiAgXCJcXFxcYmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnclwiOiB7XG4gICAgbWNsYXNzOiBcIm1jbG9zZVwiLFxuICAgIHNpemU6IDJcbiAgfSxcbiAgXCJcXFxcYmlnZ3JcIjoge1xuICAgIG1jbGFzczogXCJtY2xvc2VcIixcbiAgICBzaXplOiAzXG4gIH0sXG4gIFwiXFxcXEJpZ2dyXCI6IHtcbiAgICBtY2xhc3M6IFwibWNsb3NlXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDFcbiAgfSxcbiAgXCJcXFxcQmlnbVwiOiB7XG4gICAgbWNsYXNzOiBcIm1yZWxcIixcbiAgICBzaXplOiAyXG4gIH0sXG4gIFwiXFxcXGJpZ2dtXCI6IHtcbiAgICBtY2xhc3M6IFwibXJlbFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ21cIjoge1xuICAgIG1jbGFzczogXCJtcmVsXCIsXG4gICAgc2l6ZTogNFxuICB9LFxuICBcIlxcXFxiaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMVxuICB9LFxuICBcIlxcXFxCaWdcIjoge1xuICAgIG1jbGFzczogXCJtb3JkXCIsXG4gICAgc2l6ZTogMlxuICB9LFxuICBcIlxcXFxiaWdnXCI6IHtcbiAgICBtY2xhc3M6IFwibW9yZFwiLFxuICAgIHNpemU6IDNcbiAgfSxcbiAgXCJcXFxcQmlnZ1wiOiB7XG4gICAgbWNsYXNzOiBcIm1vcmRcIixcbiAgICBzaXplOiA0XG4gIH1cbn07XG52YXIgZGVsaW1pdGVycyA9IFtcIihcIiwgXCJcXFxcbHBhcmVuXCIsIFwiKVwiLCBcIlxcXFxycGFyZW5cIiwgXCJbXCIsIFwiXFxcXGxicmFja1wiLCBcIl1cIiwgXCJcXFxccmJyYWNrXCIsIFwiXFxcXHtcIiwgXCJcXFxcbGJyYWNlXCIsIFwiXFxcXH1cIiwgXCJcXFxccmJyYWNlXCIsIFwiXFxcXGxmbG9vclwiLCBcIlxcXFxyZmxvb3JcIiwgXCJcXHUyMzBhXCIsIFwiXFx1MjMwYlwiLCBcIlxcXFxsY2VpbFwiLCBcIlxcXFxyY2VpbFwiLCBcIlxcdTIzMDhcIiwgXCJcXHUyMzA5XCIsIFwiPFwiLCBcIj5cIiwgXCJcXFxcbGFuZ2xlXCIsIFwiXFx1MjdlOFwiLCBcIlxcXFxyYW5nbGVcIiwgXCJcXHUyN2U5XCIsIFwiXFxcXGx0XCIsIFwiXFxcXGd0XCIsIFwiXFxcXGx2ZXJ0XCIsIFwiXFxcXHJ2ZXJ0XCIsIFwiXFxcXGxWZXJ0XCIsIFwiXFxcXHJWZXJ0XCIsIFwiXFxcXGxncm91cFwiLCBcIlxcXFxyZ3JvdXBcIiwgXCJcXHUyN2VlXCIsIFwiXFx1MjdlZlwiLCBcIlxcXFxsbW91c3RhY2hlXCIsIFwiXFxcXHJtb3VzdGFjaGVcIiwgXCJcXHUyM2IwXCIsIFwiXFx1MjNiMVwiLCBcIi9cIiwgXCJcXFxcYmFja3NsYXNoXCIsIFwifFwiLCBcIlxcXFx2ZXJ0XCIsIFwiXFxcXHxcIiwgXCJcXFxcVmVydFwiLCBcIlxcXFx1cGFycm93XCIsIFwiXFxcXFVwYXJyb3dcIiwgXCJcXFxcZG93bmFycm93XCIsIFwiXFxcXERvd25hcnJvd1wiLCBcIlxcXFx1cGRvd25hcnJvd1wiLCBcIlxcXFxVcGRvd25hcnJvd1wiLCBcIi5cIl07XG5cbi8vIERlbGltaXRlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNoZWNrRGVsaW1pdGVyKGRlbGltLCBjb250ZXh0KSB7XG4gIHZhciBzeW1EZWxpbSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoZGVsaW0pO1xuXG4gIGlmIChzeW1EZWxpbSAmJiB1dGlscy5jb250YWlucyhkZWxpbWl0ZXJzLCBzeW1EZWxpbS50ZXh0KSkge1xuICAgIHJldHVybiBzeW1EZWxpbTtcbiAgfSBlbHNlIGlmIChzeW1EZWxpbSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBkZWxpbWl0ZXIgJ1wiICsgc3ltRGVsaW0udGV4dCArIFwiJyBhZnRlciAnXCIgKyBjb250ZXh0LmZ1bmNOYW1lICsgXCInXCIsIGRlbGltKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJ1wiICsgZGVsaW0udHlwZSArIFwiJ1wiLCBkZWxpbSk7XG4gIH1cbn1cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImRlbGltc2l6aW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcYmlnbFwiLCBcIlxcXFxCaWdsXCIsIFwiXFxcXGJpZ2dsXCIsIFwiXFxcXEJpZ2dsXCIsIFwiXFxcXGJpZ3JcIiwgXCJcXFxcQmlnclwiLCBcIlxcXFxiaWdnclwiLCBcIlxcXFxCaWdnclwiLCBcIlxcXFxiaWdtXCIsIFwiXFxcXEJpZ21cIiwgXCJcXFxcYmlnZ21cIiwgXCJcXFxcQmlnZ21cIiwgXCJcXFxcYmlnXCIsIFwiXFxcXEJpZ1wiLCBcIlxcXFxiaWdnXCIsIFwiXFxcXEJpZ2dcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wicHJpbWl0aXZlXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChjb250ZXh0LCBhcmdzKSA9PiB7XG4gICAgdmFyIGRlbGltID0gY2hlY2tEZWxpbWl0ZXIoYXJnc1swXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZGVsaW1zaXppbmdcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBzaXplOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5zaXplLFxuICAgICAgbWNsYXNzOiBkZWxpbWl0ZXJTaXplc1tjb250ZXh0LmZ1bmNOYW1lXS5tY2xhc3MsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIHN0aWxsIGNvdW50IGFzIGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGRvbid0XG4gICAgICAvLyBzaG93IGFueXRoaW5nLlxuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtncm91cC5tY2xhc3NdKTtcbiAgICB9IC8vIFVzZSBkZWxpbWl0ZXIuc2l6ZWREZWxpbSB0byBnZW5lcmF0ZSB0aGUgZGVsaW1pdGVyLlxuXG5cbiAgICByZXR1cm4gZGVsaW1pdGVyLnNpemVkRGVsaW0oZ3JvdXAuZGVsaW0sIGdyb3VwLnNpemUsIG9wdGlvbnMsIGdyb3VwLm1vZGUsIFtncm91cC5tY2xhc3NdKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogZ3JvdXAgPT4ge1xuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGdyb3VwLmRlbGltICE9PSBcIi5cIikge1xuICAgICAgY2hpbGRyZW4ucHVzaChtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSkpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBjaGlsZHJlbik7XG5cbiAgICBpZiAoZ3JvdXAubWNsYXNzID09PSBcIm1vcGVuXCIgfHwgZ3JvdXAubWNsYXNzID09PSBcIm1jbG9zZVwiKSB7XG4gICAgICAvLyBPbmx5IHNvbWUgb2YgdGhlIGRlbGltc2l6aW5nIGZ1bmN0aW9ucyBhY3QgYXMgZmVuY2VzLCBhbmQgdGhleVxuICAgICAgLy8gcmV0dXJuIFwibW9wZW5cIiBvciBcIm1jbG9zZVwiIG1jbGFzcy5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFeHBsaWNpdGx5IGRpc2FibGUgZmVuY2luZyBpZiBpdCdzIG5vdCBhIGZlbmNlLCB0byBvdmVycmlkZSB0aGVcbiAgICAgIC8vIGRlZmF1bHRzLlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcImZhbHNlXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBzaXplID0gbWFrZUVtKGRlbGltaXRlci5zaXplVG9NYXhIZWlnaHRbZ3JvdXAuc2l6ZV0pO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWluc2l6ZVwiLCBzaXplKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1heHNpemVcIiwgc2l6ZSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXJzZWQoZ3JvdXApIHtcbiAgaWYgKCFncm91cC5ib2R5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLlwiKTtcbiAgfVxufVxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGVmdHJpZ2h0LXJpZ2h0XCIsXG4gIG5hbWVzOiBbXCJcXFxccmlnaHRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICAvLyBcXGxlZnQgY2FzZSBiZWxvdyB0cmlnZ2VycyBwYXJzaW5nIG9mIFxccmlnaHQgaW5cbiAgICAvLyAgIGBjb25zdCByaWdodCA9IHBhcnNlci5wYXJzZUZ1bmN0aW9uKCk7YFxuICAgIC8vIHVzZXMgdGhpcyByZXR1cm4gdmFsdWUuXG4gICAgdmFyIGNvbG9yID0gY29udGV4dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcY3VycmVudEBjb2xvclwiKTtcblxuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxcXHJpZ2h0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxlZnRyaWdodC1yaWdodFwiLFxuICAgICAgbW9kZTogY29udGV4dC5wYXJzZXIubW9kZSxcbiAgICAgIGRlbGltOiBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KS50ZXh0LFxuICAgICAgY29sb3IgLy8gdW5kZWZpbmVkIGlmIG5vdCBzZXQgdmlhIFxcY29sb3JcblxuICAgIH07XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImxlZnRyaWdodFwiLFxuICBuYW1lczogW1wiXFxcXGxlZnRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBwcmltaXRpdmU6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKGNvbnRleHQsIGFyZ3MpID0+IHtcbiAgICB2YXIgZGVsaW0gPSBjaGVja0RlbGltaXRlcihhcmdzWzBdLCBjb250ZXh0KTtcbiAgICB2YXIgcGFyc2VyID0gY29udGV4dC5wYXJzZXI7IC8vIFBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuXG4gICAgKytwYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIHBhcnNlRXhwcmVzc2lvbiBzdG9wcyBiZWZvcmUgJ1xcXFxyaWdodCdcblxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgLS1wYXJzZXIubGVmdHJpZ2h0RGVwdGg7IC8vIENoZWNrIHRoZSBuZXh0IHRva2VuXG5cbiAgICBwYXJzZXIuZXhwZWN0KFwiXFxcXHJpZ2h0XCIsIGZhbHNlKTtcbiAgICB2YXIgcmlnaHQgPSBhc3NlcnROb2RlVHlwZShwYXJzZXIucGFyc2VGdW5jdGlvbigpLCBcImxlZnRyaWdodC1yaWdodFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keSxcbiAgICAgIGxlZnQ6IGRlbGltLnRleHQsXG4gICAgICByaWdodDogcmlnaHQuZGVsaW0sXG4gICAgICByaWdodENvbG9yOiByaWdodC5jb2xvclxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApOyAvLyBCdWlsZCB0aGUgaW5uZXIgZXhwcmVzc2lvblxuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSwgW1wibW9wZW5cIiwgXCJtY2xvc2VcIl0pO1xuICAgIHZhciBpbm5lckhlaWdodCA9IDA7XG4gICAgdmFyIGlubmVyRGVwdGggPSAwO1xuICAgIHZhciBoYWRNaWRkbGUgPSBmYWxzZTsgLy8gQ2FsY3VsYXRlIGl0cyBoZWlnaHQgYW5kIGRlcHRoXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgIC8vIFwibWlkZGxlXCIncyBodG1sQnVpbGRlci5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIGlmIChpbm5lcltpXS5pc01pZGRsZSkge1xuICAgICAgICBoYWRNaWRkbGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5uZXJIZWlnaHQgPSBNYXRoLm1heChpbm5lcltpXS5oZWlnaHQsIGlubmVySGVpZ2h0KTtcbiAgICAgICAgaW5uZXJEZXB0aCA9IE1hdGgubWF4KGlubmVyW2ldLmRlcHRoLCBpbm5lckRlcHRoKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBzaXplIG9mIGRlbGltaXRlcnMgaXMgdGhlIHNhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBzdHlsZSB3ZSBhcmVcbiAgICAvLyBpbi4gVGh1cywgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBkZWxpbWl0ZXIgd2UgbmVlZCBhcm91bmRcbiAgICAvLyBhIGdyb3VwLCB3ZSBzY2FsZSBkb3duIHRoZSBpbm5lciBzaXplIGJhc2VkIG9uIHRoZSBzaXplLlxuXG5cbiAgICBpbm5lckhlaWdodCAqPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIGlubmVyRGVwdGggKj0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbGVmdERlbGltO1xuXG4gICAgaWYgKGdyb3VwLmxlZnQgPT09IFwiLlwiKSB7XG4gICAgICAvLyBFbXB0eSBkZWxpbWl0ZXJzIGluIFxcbGVmdCBhbmQgXFxyaWdodCBtYWtlIG51bGwgZGVsaW1pdGVyIHNwYWNlcy5cbiAgICAgIGxlZnREZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtcIm1vcGVuXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgbGVmdFJpZ2h0RGVsaW0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qgc2l6ZWRcbiAgICAgIC8vIGRlbGltaXRlci5cbiAgICAgIGxlZnREZWxpbSA9IGRlbGltaXRlci5sZWZ0UmlnaHREZWxpbShncm91cC5sZWZ0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW1wibW9wZW5cIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4cHJlc3Npb25cblxuXG4gICAgaW5uZXIudW5zaGlmdChsZWZ0RGVsaW0pOyAvLyBIYW5kbGUgbWlkZGxlIGRlbGltaXRlcnNcblxuICAgIGlmIChoYWRNaWRkbGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBpbm5lci5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIG1pZGRsZURlbGltID0gaW5uZXJbX2ldOyAvLyBQcm9wZXJ0eSBgaXNNaWRkbGVgIG5vdCBkZWZpbmVkIG9uIGBzcGFuYC4gU2VlIGNvbW1lbnQgaW5cbiAgICAgICAgLy8gXCJtaWRkbGVcIidzIGh0bWxCdWlsZGVyLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgdmFyIGlzTWlkZGxlID0gbWlkZGxlRGVsaW0uaXNNaWRkbGU7XG5cbiAgICAgICAgaWYgKGlzTWlkZGxlKSB7XG4gICAgICAgICAgLy8gQXBwbHkgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIGFjdGl2ZSB3aGVuIFxcbWlkZGxlIHdhcyBjYWxsZWRcbiAgICAgICAgICBpbm5lcltfaV0gPSBkZWxpbWl0ZXIubGVmdFJpZ2h0RGVsaW0oaXNNaWRkbGUuZGVsaW0sIGlubmVySGVpZ2h0LCBpbm5lckRlcHRoLCBpc01pZGRsZS5vcHRpb25zLCBncm91cC5tb2RlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmlnaHREZWxpbTsgLy8gU2FtZSBmb3IgdGhlIHJpZ2h0IGRlbGltaXRlciwgYnV0IHVzaW5nIGNvbG9yIHNwZWNpZmllZCBieSBcXGNvbG9yXG5cbiAgICBpZiAoZ3JvdXAucmlnaHQgPT09IFwiLlwiKSB7XG4gICAgICByaWdodERlbGltID0gbWFrZU51bGxEZWxpbWl0ZXIob3B0aW9ucywgW1wibWNsb3NlXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbG9yT3B0aW9ucyA9IGdyb3VwLnJpZ2h0Q29sb3IgPyBvcHRpb25zLndpdGhDb2xvcihncm91cC5yaWdodENvbG9yKSA6IG9wdGlvbnM7XG4gICAgICByaWdodERlbGltID0gZGVsaW1pdGVyLmxlZnRSaWdodERlbGltKGdyb3VwLnJpZ2h0LCBpbm5lckhlaWdodCwgaW5uZXJEZXB0aCwgY29sb3JPcHRpb25zLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICAgIH0gLy8gQWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24uXG5cblxuICAgIGlubmVyLnB1c2gocmlnaHREZWxpbSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1pbm5lclwiXSwgaW5uZXIsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICBhc3NlcnRQYXJzZWQoZ3JvdXApO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5sZWZ0ICE9PSBcIi5cIikge1xuICAgICAgdmFyIGxlZnROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoZ3JvdXAubGVmdCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIGxlZnROb2RlLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGlubmVyLnVuc2hpZnQobGVmdE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5yaWdodCAhPT0gXCIuXCIpIHtcbiAgICAgIHZhciByaWdodE5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5yaWdodCwgZ3JvdXAubW9kZSldKTtcbiAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG5cbiAgICAgIGlmIChncm91cC5yaWdodENvbG9yKSB7XG4gICAgICAgIHJpZ2h0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRoY29sb3JcIiwgZ3JvdXAucmlnaHRDb2xvcik7XG4gICAgICB9XG5cbiAgICAgIGlubmVyLnB1c2gocmlnaHROb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyhpbm5lcik7XG4gIH1cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1pZGRsZVwiLFxuICBuYW1lczogW1wiXFxcXG1pZGRsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoY29udGV4dCwgYXJncykgPT4ge1xuICAgIHZhciBkZWxpbSA9IGNoZWNrRGVsaW1pdGVyKGFyZ3NbMF0sIGNvbnRleHQpO1xuXG4gICAgaWYgKCFjb250ZXh0LnBhcnNlci5sZWZ0cmlnaHREZXB0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcXFxsZWZ0XCIsIGRlbGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJtaWRkbGVcIixcbiAgICAgIG1vZGU6IGNvbnRleHQucGFyc2VyLm1vZGUsXG4gICAgICBkZWxpbTogZGVsaW0udGV4dFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWlkZGxlRGVsaW07XG5cbiAgICBpZiAoZ3JvdXAuZGVsaW0gPT09IFwiLlwiKSB7XG4gICAgICBtaWRkbGVEZWxpbSA9IG1ha2VOdWxsRGVsaW1pdGVyKG9wdGlvbnMsIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkZGxlRGVsaW0gPSBkZWxpbWl0ZXIuc2l6ZWREZWxpbShncm91cC5kZWxpbSwgMSwgb3B0aW9ucywgZ3JvdXAubW9kZSwgW10pO1xuICAgICAgdmFyIGlzTWlkZGxlID0ge1xuICAgICAgICBkZWxpbTogZ3JvdXAuZGVsaW0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIH07IC8vIFByb3BlcnR5IGBpc01pZGRsZWAgbm90IGRlZmluZWQgb24gYHNwYW5gLiBJdCBpcyBvbmx5IHVzZWQgaW5cbiAgICAgIC8vIHRoaXMgZmlsZSBhYm92ZS5cbiAgICAgIC8vIFRPRE86IEZpeCB0aGlzIHZpb2xhdGlvbiBvZiB0aGUgYHNwYW5gIHR5cGUgYW5kIHBvc3NpYmx5IHJlbmFtZVxuICAgICAgLy8gdGhpbmdzIHNpbmNlIGBpc01pZGRsZWAgc291bmRzIGxpa2UgYSBib29sZWFuLCBidXQgaXMgYSBzdHJ1Y3QuXG4gICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIG1pZGRsZURlbGltLmlzTWlkZGxlID0gaXNNaWRkbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZURlbGltO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBBIEZpcmVmb3ggXFxtaWRkbGUgd2lsbCBzdHJldGNoIGEgY2hhcmFjdGVyIHZlcnRpY2FsbHkgb25seSBpZiBpdFxuICAgIC8vIGlzIGluIHRoZSBmZW5jZSBwYXJ0IG9mIHRoZSBvcGVyYXRvciBkaWN0aW9uYXJ5IGF0OlxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwzL2FwcGVuZGl4Yy5odG1sLlxuICAgIC8vIFNvIHdlIG5lZWQgdG8gYXZvaWQgVSsyMjIzIGFuZCB1c2UgcGxhaW4gXCJ8XCIgaW5zdGVhZC5cbiAgICB2YXIgdGV4dE5vZGUgPSBncm91cC5kZWxpbSA9PT0gXCJcXFxcdmVydFwiIHx8IGdyb3VwLmRlbGltID09PSBcInxcIiA/IG1ha2VUZXh0KFwifFwiLCBcInRleHRcIikgOiBtYWtlVGV4dChncm91cC5kZWxpbSwgZ3JvdXAubW9kZSk7XG4gICAgdmFyIG1pZGRsZU5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFt0ZXh0Tm9kZV0pO1xuICAgIG1pZGRsZU5vZGUuc2V0QXR0cmlidXRlKFwiZmVuY2VcIiwgXCJ0cnVlXCIpOyAvLyBNYXRoTUwgZ2l2ZXMgNS8xOGVtIHNwYWNpbmcgdG8gZWFjaCA8bW8+IGVsZW1lbnQuXG4gICAgLy8gXFxtaWRkbGUgc2hvdWxkIGdldCBkZWxpbWl0ZXIgc3BhY2luZyBpbnN0ZWFkLlxuXG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJsc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgbWlkZGxlTm9kZS5zZXRBdHRyaWJ1dGUoXCJyc3BhY2VcIiwgXCIwLjA1ZW1cIik7XG4gICAgcmV0dXJuIG1pZGRsZU5vZGU7XG4gIH1cbn0pO1xuXG52YXIgaHRtbEJ1aWxkZXIkNyA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBcXGNhbmNlbCwgXFxiY2FuY2VsLCBcXHhjYW5jZWwsIFxcc291dCwgXFxmYm94LCBcXGNvbG9yYm94LCBcXGZjb2xvcmJveCwgXFxwaGFzZVxuICAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAvLyB0aGVtIGluIGEgc3Bhbi5cbiAgdmFyIGlubmVyID0gYnVpbGRDb21tb24ud3JhcEZyYWdtZW50KGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIHZhciBsYWJlbCA9IGdyb3VwLmxhYmVsLnNsaWNlKDEpO1xuICB2YXIgc2NhbGUgPSBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICB2YXIgaW1nO1xuICB2YXIgaW1nU2hpZnQgPSAwOyAvLyBJbiB0aGUgTGFUZVggY2FuY2VsIHBhY2thZ2UsIGxpbmUgZ2VvbWV0cnkgaXMgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzdWJqZWN0IGlzIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCwgb3IgdmljZSB2ZXJzYS5cbiAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgd2lkdGggb2YgYSBncm91cCwgc28gYXMgYSBwcm94eSwgd2UgdGVzdCBpZlxuICAvLyB0aGUgc3ViamVjdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuIFRoaXMgY2FwdHVyZXMgbW9zdCBvZiB0aGVcbiAgLy8gc3ViamVjdHMgdGhhdCBzaG91bGQgZ2V0IHRoZSBcInRhbGxcIiB0cmVhdG1lbnQuXG5cbiAgdmFyIGlzU2luZ2xlQ2hhciA9IHV0aWxzLmlzQ2hhcmFjdGVyQm94KGdyb3VwLmJvZHkpO1xuXG4gIGlmIChsYWJlbCA9PT0gXCJzb3V0XCIpIHtcbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJzdHJldGNoeVwiLCBcInNvdXRcIl0pO1xuICAgIGltZy5oZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MgLyBzY2FsZTtcbiAgICBpbWdTaGlmdCA9IC0wLjUgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkueEhlaWdodDtcbiAgfSBlbHNlIGlmIChsYWJlbCA9PT0gXCJwaGFzZVwiKSB7XG4gICAgLy8gU2V0IGEgY291cGxlIG9mIGRpbWVuc2lvbnMgZnJvbSB0aGUgc3RlaW5tZXR6IHBhY2thZ2UuXG4gICAgdmFyIGxpbmVXZWlnaHQgPSBjYWxjdWxhdGVTaXplKHtcbiAgICAgIG51bWJlcjogMC42LFxuICAgICAgdW5pdDogXCJwdFwiXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdmFyIGNsZWFyYW5jZSA9IGNhbGN1bGF0ZVNpemUoe1xuICAgICAgbnVtYmVyOiAwLjM1LFxuICAgICAgdW5pdDogXCJleFwiXG4gICAgfSwgb3B0aW9ucyk7IC8vIFByZXZlbnQgc2l6ZSBjaGFuZ2VzIGxpa2UgXFxIdWdlIGZyb20gYWZmZWN0aW5nIGxpbmUgdGhpY2tuZXNzXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nQmFzZVNpemluZygpO1xuICAgIHNjYWxlID0gc2NhbGUgLyBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgIHZhciBhbmdsZUhlaWdodCA9IGlubmVyLmhlaWdodCArIGlubmVyLmRlcHRoICsgbGluZVdlaWdodCArIGNsZWFyYW5jZTsgLy8gUmVzZXJ2ZSBhIGxlZnQgcGFkIGZvciB0aGUgYW5nbGUuXG5cbiAgICBpbm5lci5zdHlsZS5wYWRkaW5nTGVmdCA9IG1ha2VFbShhbmdsZUhlaWdodCAvIDIgKyBsaW5lV2VpZ2h0KTsgLy8gQ3JlYXRlIGFuIFNWR1xuXG4gICAgdmFyIHZpZXdCb3hIZWlnaHQgPSBNYXRoLmZsb29yKDEwMDAgKiBhbmdsZUhlaWdodCAqIHNjYWxlKTtcbiAgICB2YXIgcGF0aCA9IHBoYXNlUGF0aCh2aWV3Qm94SGVpZ2h0KTtcbiAgICB2YXIgc3ZnTm9kZSA9IG5ldyBTdmdOb2RlKFtuZXcgUGF0aE5vZGUoXCJwaGFzZVwiLCBwYXRoKV0sIHtcbiAgICAgIFwid2lkdGhcIjogXCI0MDBlbVwiLFxuICAgICAgXCJoZWlnaHRcIjogbWFrZUVtKHZpZXdCb3hIZWlnaHQgLyAxMDAwKSxcbiAgICAgIFwidmlld0JveFwiOiBcIjAgMCA0MDAwMDAgXCIgKyB2aWV3Qm94SGVpZ2h0LFxuICAgICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCI6IFwieE1pbllNaW4gc2xpY2VcIlxuICAgIH0pOyAvLyBXcmFwIGl0IGluIGEgc3BhbiB3aXRoIG92ZXJmbG93OiBoaWRkZW4uXG5cbiAgICBpbWcgPSBidWlsZENvbW1vbi5tYWtlU3ZnU3BhbihbXCJoaWRlLXRhaWxcIl0sIFtzdmdOb2RlXSwgb3B0aW9ucyk7XG4gICAgaW1nLnN0eWxlLmhlaWdodCA9IG1ha2VFbShhbmdsZUhlaWdodCk7XG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGxpbmVXZWlnaHQgKyBjbGVhcmFuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gQWRkIGhvcml6b250YWwgcGFkZGluZ1xuICAgIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgICAgaWYgKCFpc1NpbmdsZUNoYXIpIHtcbiAgICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiY2FuY2VsLXBhZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYW5nbHBhZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIuY2xhc3Nlcy5wdXNoKFwiYm94cGFkXCIpO1xuICAgIH0gLy8gQWRkIHZlcnRpY2FsIHBhZGRpbmdcblxuXG4gICAgdmFyIHRvcFBhZCA9IDA7XG4gICAgdmFyIGJvdHRvbVBhZCA9IDA7XG4gICAgdmFyIHJ1bGVUaGlja25lc3MgPSAwOyAvLyByZWY6IGNhbmNlbCBwYWNrYWdlOiBcXGFkdmFuY2VcXHRvdGFsaGVpZ2h0MlxccEAgJSBcIisyXCJcblxuICAgIGlmICgvYm94Ly50ZXN0KGxhYmVsKSkge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICAgICApO1xuICAgICAgdG9wUGFkID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKyAobGFiZWwgPT09IFwiY29sb3Jib3hcIiA/IDAgOiBydWxlVGhpY2tuZXNzKTtcbiAgICAgIGJvdHRvbVBhZCA9IHRvcFBhZDtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIikge1xuICAgICAgcnVsZVRoaWNrbmVzcyA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcywgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzKTtcbiAgICAgIHRvcFBhZCA9IDQgKiBydWxlVGhpY2tuZXNzOyAvLyBnYXAgPSAzIMOXIGxpbmUsIHBsdXMgdGhlIGxpbmUgaXRzZWxmLlxuXG4gICAgICBib3R0b21QYWQgPSBNYXRoLm1heCgwLCAwLjI1IC0gaW5uZXIuZGVwdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3BQYWQgPSBpc1NpbmdsZUNoYXIgPyAwLjIgOiAwO1xuICAgICAgYm90dG9tUGFkID0gdG9wUGFkO1xuICAgIH1cblxuICAgIGltZyA9IHN0cmV0Y2h5LmVuY2xvc2VTcGFuKGlubmVyLCBsYWJlbCwgdG9wUGFkLCBib3R0b21QYWQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChsYWJlbCkpIHtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgIGltZy5zdHlsZS5ib3JkZXJXaWR0aCA9IG1ha2VFbShydWxlVGhpY2tuZXNzKTtcbiAgICB9IGVsc2UgaWYgKGxhYmVsID09PSBcImFuZ2xcIiAmJiBydWxlVGhpY2tuZXNzICE9PSAwLjA0OSkge1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gbWFrZUVtKHJ1bGVUaGlja25lc3MpO1xuICAgICAgaW1nLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgfVxuXG4gICAgaW1nU2hpZnQgPSBpbm5lci5kZXB0aCArIGJvdHRvbVBhZDtcblxuICAgIGlmIChncm91cC5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGltZy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBncm91cC5iYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICAgIGlmIChncm91cC5ib3JkZXJDb2xvcikge1xuICAgICAgICBpbWcuc3R5bGUuYm9yZGVyQ29sb3IgPSBncm91cC5ib3JkZXJDb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdmxpc3Q7XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gUHV0IHRoZSBjb2xvciBiYWNrZ3JvdW5kIGJlaGluZCBpbm5lcjtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNsYXNzZXMgPSAvY2FuY2VsfHBoYXNlLy50ZXN0KGxhYmVsKSA/IFtcInN2Zy1hbGlnblwiXSA6IFtdO1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgIGNoaWxkcmVuOiBbLy8gV3JpdGUgdGhlIFxcY2FuY2VsIHN0cm9rZSBvbiB0b3Agb2YgaW5uZXIuXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgc2hpZnQ6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZyxcbiAgICAgICAgc2hpZnQ6IGltZ1NoaWZ0LFxuICAgICAgICB3cmFwcGVyQ2xhc3NlczogY2xhc3Nlc1xuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSkge1xuICAgIC8vIFRoZSBjYW5jZWwgcGFja2FnZSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBjYW5jZWwgbGluZXMgYWRkIHRoZWlyIGhlaWdodFxuICAgIC8vIHRvIHRoZSBleHByZXNzaW9uLCBidXQgdGVzdHMgc2hvdyB0aGF0IGlzbid0IGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cbiAgICB2bGlzdC5oZWlnaHQgPSBpbm5lci5oZWlnaHQ7XG4gICAgdmxpc3QuZGVwdGggPSBpbm5lci5kZXB0aDtcbiAgfVxuXG4gIGlmICgvY2FuY2VsLy50ZXN0KGxhYmVsKSAmJiAhaXNTaW5nbGVDaGFyKSB7XG4gICAgLy8gY2FuY2VsIGRvZXMgbm90IGNyZWF0ZSBob3JpeiBzcGFjZSBmb3IgaXRzIGxpbmUgZXh0ZW5zaW9uLlxuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwiY2FuY2VsLWxhcFwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xuICB9XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQ2ID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBmYm94c2VwID0gMDtcbiAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShncm91cC5sYWJlbC5pbmRleE9mKFwiY29sb3Jib3hcIikgPiAtMSA/IFwibXBhZGRlZFwiIDogXCJtZW5jbG9zZVwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gIHN3aXRjaCAoZ3JvdXAubGFiZWwpIHtcbiAgICBjYXNlIFwiXFxcXGNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInVwZGlhZ29uYWxzdHJpa2VcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYmNhbmNlbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxwaGFzZVwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcInBoYXNvcmFuZ2xlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHNvdXRcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJob3Jpem9udGFsc3RyaWtlXCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXGZib3hcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJib3hcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJcXFxcYW5nbFwiOlxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJub3RhdGlvblwiLCBcImFjdHVhcmlhbFwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlxcXFxmY29sb3Jib3hcIjpcbiAgICBjYXNlIFwiXFxcXGNvbG9yYm94XCI6XG4gICAgICAvLyA8bWVuY2xvc2U+IGRvZXNuJ3QgaGF2ZSBhIGdvb2Qgbm90YXRpb24gb3B0aW9uLiBTbyB1c2UgPG1wYWRkZWQ+XG4gICAgICAvLyBpbnN0ZWFkLiBTZXQgc29tZSBhdHRyaWJ1dGVzIHRoYXQgY29tZSBpbmNsdWRlZCB3aXRoIDxtZW5jbG9zZT4uXG4gICAgICBmYm94c2VwID0gb3B0aW9ucy5mb250TWV0cmljcygpLmZib3hzZXAgKiBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIrXCIgKyAyICogZmJveHNlcCArIFwicHRcIik7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIitcIiArIDIgKiBmYm94c2VwICsgXCJwdFwiKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibHNwYWNlXCIsIGZib3hzZXAgKyBcInB0XCIpOyAvL1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgZmJveHNlcCArIFwicHRcIik7XG5cbiAgICAgIGlmIChncm91cC5sYWJlbCA9PT0gXCJcXFxcZmNvbG9yYm94XCIpIHtcbiAgICAgICAgdmFyIHRoayA9IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSwgLy8gZGVmYXVsdFxuICAgICAgICBvcHRpb25zLm1pblJ1bGVUaGlja25lc3MgLy8gdXNlciBvdmVycmlkZVxuICAgICAgICApO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiBcIiArIHRoayArIFwiZW0gc29saWQgXCIgKyBTdHJpbmcoZ3JvdXAuYm9yZGVyQ29sb3IpKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXFxcXHhjYW5jZWxcIjpcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibm90YXRpb25cIiwgXCJ1cGRpYWdvbmFsc3RyaWtlIGRvd25kaWFnb25hbHN0cmlrZVwiKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGdyb3VwLmJhY2tncm91bmRDb2xvcikge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aGJhY2tncm91bmRcIiwgZ3JvdXAuYmFja2dyb3VuZENvbG9yKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjb2xvcmJveFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgYXJnVHlwZXM6IFtcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBjb2xvciA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwiY29sb3ItdG9rZW5cIikuY29sb3I7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmY29sb3Jib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJjb2xvclwiLCBcImNvbG9yXCIsIFwidGV4dFwiXVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjIsIGFyZ3MsIG9wdEFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGJvcmRlckNvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYmFja2dyb3VuZENvbG9yID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1sxXSwgXCJjb2xvci10b2tlblwiKS5jb2xvcjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5jbG9zZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJDb2xvcixcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ3LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDZcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxmYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcImhib3hcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjMsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGZib3hcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImVuY2xvc2VcIixcbiAgbmFtZXM6IFtcIlxcXFxjYW5jZWxcIiwgXCJcXFxcYmNhbmNlbFwiLCBcIlxcXFx4Y2FuY2VsXCIsIFwiXFxcXHNvdXRcIiwgXCJcXFxccGhhc2VcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjQsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjQ7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IGZ1bmNOYW1lLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDcsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNlxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZW5jbG9zZVwiLFxuICBuYW1lczogW1wiXFxcXGFuZ2xcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wiaGJveFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVuY2xvc2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbGFiZWw6IFwiXFxcXGFuZ2xcIixcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGVudmlyb25tZW50cy5cbiAqIGBlbnZpcm9ubWVudHMuanNgIGV4cG9ydHMgdGhpcyBzYW1lIGRpY3Rpb25hcnkgYWdhaW4gYW5kIG1ha2VzIGl0IHB1YmxpYy5cbiAqIGBQYXJzZXIuanNgIHJlcXVpcmVzIHRoaXMgZGljdGlvbmFyeSB2aWEgYGVudmlyb25tZW50cy5qc2AuXG4gKi9cbnZhciBfZW52aXJvbm1lbnRzID0ge307XG5mdW5jdGlvbiBkZWZpbmVFbnZpcm9ubWVudChfcmVmKSB7XG4gIHZhciB7XG4gICAgdHlwZSxcbiAgICBuYW1lcyxcbiAgICBwcm9wcyxcbiAgICBoYW5kbGVyLFxuICAgIGh0bWxCdWlsZGVyLFxuICAgIG1hdGhtbEJ1aWxkZXJcbiAgfSA9IF9yZWY7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBvZiBlbnZpcm9ubWVudHMuXG4gIHZhciBkYXRhID0ge1xuICAgIHR5cGUsXG4gICAgbnVtQXJnczogcHJvcHMubnVtQXJncyB8fCAwLFxuICAgIGFsbG93ZWRJblRleHQ6IGZhbHNlLFxuICAgIG51bU9wdGlvbmFsQXJnczogMCxcbiAgICBoYW5kbGVyXG4gIH07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgIC8vIFRPRE86IFRoZSB2YWx1ZSB0eXBlIG9mIF9lbnZpcm9ubWVudHMgc2hvdWxkIGJlIGEgdHlwZSB1bmlvbiBvZiBhbGxcbiAgICAvLyBwb3NzaWJsZSBgRW52U3BlYzw+YCBwb3NzaWJpbGl0aWVzIGluc3RlYWQgb2YgYEVudlNwZWM8Kj5gLCB3aGljaCBpc1xuICAgIC8vIGFuIGV4aXN0ZW50aWFsIHR5cGUuXG4gICAgX2Vudmlyb25tZW50c1tuYW1lc1tpXV0gPSBkYXRhO1xuICB9XG5cbiAgaWYgKGh0bWxCdWlsZGVyKSB7XG4gICAgX2h0bWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gaHRtbEJ1aWxkZXI7XG4gIH1cblxuICBpZiAobWF0aG1sQnVpbGRlcikge1xuICAgIF9tYXRobWxHcm91cEJ1aWxkZXJzW3R5cGVdID0gbWF0aG1sQnVpbGRlcjtcbiAgfVxufVxuXG4vKipcbiAqIEFsbCByZWdpc3RlcmVkIGdsb2JhbC9idWlsdC1pbiBtYWNyb3MuXG4gKiBgbWFjcm9zLmpzYCBleHBvcnRzIHRoaXMgc2FtZSBkaWN0aW9uYXJ5IGFnYWluIGFuZCBtYWtlcyBpdCBwdWJsaWMuXG4gKiBgUGFyc2VyLmpzYCByZXF1aXJlcyB0aGlzIGRpY3Rpb25hcnkgdmlhIGBtYWNyb3MuanNgLlxuICovXG52YXIgX21hY3JvcyA9IHt9OyAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG9uZSBkYXkgYWNjZXB0IGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgYW5kIGRvIG1vcmUgdGhpbmdzLlxuXG5mdW5jdGlvbiBkZWZpbmVNYWNybyhuYW1lLCBib2R5KSB7XG4gIF9tYWNyb3NbbmFtZV0gPSBib2R5O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRITGluZXMocGFyc2VyKSB7XG4gIC8vIFJldHVybiBhbiBhcnJheS4gVGhlIGFycmF5IGxlbmd0aCA9IG51bWJlciBvZiBobGluZXMuXG4gIC8vIEVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXkgdGVsbHMgaWYgdGhlIGxpbmUgaXMgZGFzaGVkLlxuICB2YXIgaGxpbmVJbmZvID0gW107XG4gIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gIHZhciBueHQgPSBwYXJzZXIuZmV0Y2goKS50ZXh0O1xuXG4gIGlmIChueHQgPT09IFwiXFxcXHJlbGF4XCIpIHtcbiAgICAvLyBcXHJlbGF4IGlzIGFuIGFydGlmYWN0IG9mIHRoZSBcXGNyIG1hY3JvIGJlbG93XG4gICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICBwYXJzZXIuY29uc3VtZVNwYWNlcygpO1xuICAgIG54dCA9IHBhcnNlci5mZXRjaCgpLnRleHQ7XG4gIH1cblxuICB3aGlsZSAobnh0ID09PSBcIlxcXFxobGluZVwiIHx8IG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpIHtcbiAgICBwYXJzZXIuY29uc3VtZSgpO1xuICAgIGhsaW5lSW5mby5wdXNoKG54dCA9PT0gXCJcXFxcaGRhc2hsaW5lXCIpO1xuICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgbnh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcbiAgfVxuXG4gIHJldHVybiBobGluZUluZm87XG59XG5cbnZhciB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCA9IGNvbnRleHQgPT4ge1xuICB2YXIgc2V0dGluZ3MgPSBjb250ZXh0LnBhcnNlci5zZXR0aW5ncztcblxuICBpZiAoIXNldHRpbmdzLmRpc3BsYXlNb2RlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7XCIgKyBjb250ZXh0LmVudk5hbWUgKyBcIn0gY2FuIGJlIHVzZWQgb25seSBpblwiICsgXCIgZGlzcGxheSBtb2RlLlwiKTtcbiAgfVxufTsgLy8gYXV0b1RhZyAoYW4gYXJndW1lbnQgdG8gcGFyc2VBcnJheSkgY2FuIGJlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6XG4vLyAqIHVuZGVmaW5lZDogUmVndWxhciAobm90LXRvcC1sZXZlbCkgYXJyYXk7IG5vIHRhZ3Mgb24gZWFjaCByb3dcbi8vICogdHJ1ZTogQXV0b21hdGljIGVxdWF0aW9uIG51bWJlcmluZywgb3ZlcnJpZGFibGUgYnkgXFx0YWdcbi8vICogZmFsc2U6IFRhZ3MgYWxsb3dlZCBvbiBlYWNoIHJvdywgYnV0IG5vIGF1dG9tYXRpYyBudW1iZXJpbmdcbi8vIFRoaXMgZnVuY3Rpb24gKmRvZXNuJ3QqIHdvcmsgd2l0aCB0aGUgXCJzcGxpdFwiIGVudmlyb25tZW50IG5hbWUuXG5cblxuZnVuY3Rpb24gZ2V0QXV0b1RhZyhuYW1lKSB7XG4gIGlmIChuYW1lLmluZGV4T2YoXCJlZFwiKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbmFtZS5pbmRleE9mKFwiKlwiKSA9PT0gLTE7XG4gIH0gLy8gcmV0dXJuIHVuZGVmaW5lZDtcblxufVxuLyoqXG4gKiBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZW52aXJvbm1lbnQsIHdpdGggcm93cyBkZWxpbWl0ZWQgYnkgXFxcXCBhbmRcbiAqIGNvbHVtbnMgZGVsaW1pdGVkIGJ5ICYsIGFuZCBjcmVhdGUgYSBuZXN0ZWQgbGlzdCBpbiByb3ctbWFqb3Igb3JkZXJcbiAqIHdpdGggb25lIGdyb3VwIHBlciBjZWxsLiAgSWYgZ2l2ZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgc3R5bGVcbiAqIChcInRleHRcIiwgXCJkaXNwbGF5XCIsIGV0Yy4pLCB0aGVuIGVhY2ggY2VsbCBpcyBjYXN0IGludG8gdGhhdCBzdHlsZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXkocGFyc2VyLCBfcmVmLCBzdHlsZSkge1xuICB2YXIge1xuICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXIsXG4gICAgYWRkSm90LFxuICAgIGNvbHMsXG4gICAgYXJyYXlzdHJldGNoLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlLFxuICAgIGF1dG9UYWcsXG4gICAgc2luZ2xlUm93LFxuICAgIGVtcHR5U2luZ2xlUm93LFxuICAgIG1heE51bUNvbHMsXG4gICAgbGVxbm9cbiAgfSA9IF9yZWY7XG4gIHBhcnNlci5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuXG4gIGlmICghc2luZ2xlUm93KSB7XG4gICAgLy8gXFxjciBpcyBlcXVpdmFsZW50IHRvIFxcXFwgd2l0aG91dCB0aGUgb3B0aW9uYWwgc2l6ZSBhcmd1bWVudCAoc2VlIGJlbG93KVxuICAgIC8vIFRPRE86IHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aGVuIFxcY3IgaXMgdXNlZCBvdXRzaWRlIGFycmF5IGVudmlyb25tZW50XG4gICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGNyXCIsIFwiXFxcXFxcXFxcXFxccmVsYXhcIik7XG4gIH0gLy8gR2V0IGN1cnJlbnQgYXJyYXlzdHJldGNoIGlmIGl0J3Mgbm90IHNldCBieSB0aGUgZW52aXJvbm1lbnRcblxuXG4gIGlmICghYXJyYXlzdHJldGNoKSB7XG4gICAgdmFyIHN0cmV0Y2ggPSBwYXJzZXIuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KFwiXFxcXGFycmF5c3RyZXRjaFwiKTtcblxuICAgIGlmIChzdHJldGNoID09IG51bGwpIHtcbiAgICAgIC8vIERlZmF1bHQgXFxhcnJheXN0cmV0Y2ggZnJvbSBsdHRhYi5kdHhcbiAgICAgIGFycmF5c3RyZXRjaCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5c3RyZXRjaCA9IHBhcnNlRmxvYXQoc3RyZXRjaCk7XG5cbiAgICAgIGlmICghYXJyYXlzdHJldGNoIHx8IGFycmF5c3RyZXRjaCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIFxcXFxhcnJheXN0cmV0Y2g6IFwiICsgc3RyZXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFN0YXJ0IGdyb3VwIGZvciBmaXJzdCBjZWxsXG5cblxuICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgdmFyIHJvdyA9IFtdO1xuICB2YXIgYm9keSA9IFtyb3ddO1xuICB2YXIgcm93R2FwcyA9IFtdO1xuICB2YXIgaExpbmVzQmVmb3JlUm93ID0gW107XG4gIHZhciB0YWdzID0gYXV0b1RhZyAhPSBudWxsID8gW10gOiB1bmRlZmluZWQ7IC8vIGFtc21hdGggdXNlcyBcXGdsb2JhbFxcQGVxbnN3dHJ1ZSBhbmQgXFxnbG9iYWxcXEBlcW5zd2ZhbHNlIHRvIHJlcHJlc2VudFxuICAvLyB3aGV0aGVyIHRoaXMgcm93IHNob3VsZCBoYXZlIGFuIGVxdWF0aW9uIG51bWJlci4gIFNpbXVsYXRlIHRoaXMgd2l0aFxuICAvLyBhIFxcQGVxbnN3IG1hY3JvIHNldCB0byAxIG9yIDAuXG5cbiAgZnVuY3Rpb24gYmVnaW5Sb3coKSB7XG4gICAgaWYgKGF1dG9UYWcpIHtcbiAgICAgIHBhcnNlci5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxAZXFuc3dcIiwgXCIxXCIsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZFJvdygpIHtcbiAgICBpZiAodGFncykge1xuICAgICAgaWYgKHBhcnNlci5ndWxsZXQubWFjcm9zLmdldChcIlxcXFxkZkB0YWdcIikpIHtcbiAgICAgICAgdGFncy5wdXNoKHBhcnNlci5zdWJwYXJzZShbbmV3IFRva2VuKFwiXFxcXGRmQHRhZ1wiKV0pKTtcbiAgICAgICAgcGFyc2VyLmd1bGxldC5tYWNyb3Muc2V0KFwiXFxcXGRmQHRhZ1wiLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFncy5wdXNoKEJvb2xlYW4oYXV0b1RhZykgJiYgcGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KFwiXFxcXEBlcW5zd1wiKSA9PT0gXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJlZ2luUm93KCk7IC8vIFRlc3QgZm9yIFxcaGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkuXG5cbiAgaExpbmVzQmVmb3JlUm93LnB1c2goZ2V0SExpbmVzKHBhcnNlcikpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAvLyBQYXJzZSBlYWNoIGNlbGwgaW4gaXRzIG93biBncm91cCAobmFtZXNwYWNlKVxuICAgIHZhciBjZWxsID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgc2luZ2xlUm93ID8gXCJcXFxcZW5kXCIgOiBcIlxcXFxcXFxcXCIpO1xuICAgIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICBwYXJzZXIuZ3VsbGV0LmJlZ2luR3JvdXAoKTtcbiAgICBjZWxsID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5OiBjZWxsXG4gICAgfTtcblxuICAgIGlmIChzdHlsZSkge1xuICAgICAgY2VsbCA9IHtcbiAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgYm9keTogW2NlbGxdXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJvdy5wdXNoKGNlbGwpO1xuICAgIHZhciBuZXh0ID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgIGlmIChuZXh0ID09PSBcIiZcIikge1xuICAgICAgaWYgKG1heE51bUNvbHMgJiYgcm93Lmxlbmd0aCA9PT0gbWF4TnVtQ29scykge1xuICAgICAgICBpZiAoc2luZ2xlUm93IHx8IGNvbFNlcGFyYXRpb25UeXBlKSB7XG4gICAgICAgICAgLy8ge2VxdWF0aW9ufSBvciB7c3BsaXR9XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJlwiLCBwYXJzZXIubmV4dFRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB7YXJyYXl9IGVudmlyb25tZW50XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInRleHRFbnZcIiwgXCJUb28gZmV3IGNvbHVtbnMgXCIgKyBcInNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxlbmRcIikge1xuICAgICAgZW5kUm93KCk7IC8vIEFycmF5cyB0ZXJtaW5hdGUgbmV3bGluZXMgd2l0aCBgXFxjcmNyYCB3aGljaCBjb25zdW1lcyBhIGBcXGNyYCBpZlxuICAgICAgLy8gdGhlIGxhc3QgbGluZSBpcyBlbXB0eS4gIEhvd2V2ZXIsIEFNUyBlbnZpcm9ubWVudHMga2VlcCB0aGVcbiAgICAgIC8vIGVtcHR5IHJvdyBpZiBpdCdzIHRoZSBvbmx5IG9uZS5cbiAgICAgIC8vIE5PVEU6IEN1cnJlbnRseSwgYGNlbGxgIGlzIHRoZSBsYXN0IGl0ZW0gYWRkZWQgaW50byBgcm93YC5cblxuICAgICAgaWYgKHJvdy5sZW5ndGggPT09IDEgJiYgY2VsbC50eXBlID09PSBcInN0eWxpbmdcIiAmJiBjZWxsLmJvZHlbMF0uYm9keS5sZW5ndGggPT09IDAgJiYgKGJvZHkubGVuZ3RoID4gMSB8fCAhZW1wdHlTaW5nbGVSb3cpKSB7XG4gICAgICAgIGJvZHkucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoTGluZXNCZWZvcmVSb3cubGVuZ3RoIDwgYm9keS5sZW5ndGggKyAxKSB7XG4gICAgICAgIGhMaW5lc0JlZm9yZVJvdy5wdXNoKFtdKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICB2YXIgc2l6ZSA9IHZvaWQgMDsgLy8gXFxkZWZcXExldEB7XFxsZXRcXFxcXFxtYXRoQGNyfVxuICAgICAgLy8gXFxkZWZcXG1hdGhAY3J7Li4uXFxtYXRoQGNyQH1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQHtcXG5ld0BpZm5leHRjaGFyW1xcbWF0aEBjckBAe1xcbWF0aEBjckBAW1xcekBdfX1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBbIzFdey4uLlxcbWF0aEBjckBAQC4uLn1cbiAgICAgIC8vIFxcZGVmXFxtYXRoQGNyQEBAe1xcY3J9XG5cbiAgICAgIGlmIChwYXJzZXIuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwiIFwiKSB7XG4gICAgICAgIHNpemUgPSBwYXJzZXIucGFyc2VTaXplR3JvdXAodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJvd0dhcHMucHVzaChzaXplID8gc2l6ZS52YWx1ZSA6IG51bGwpO1xuICAgICAgZW5kUm93KCk7IC8vIGNoZWNrIGZvciBcXGhsaW5lKHMpIGZvbGxvd2luZyB0aGUgcm93IHNlcGFyYXRvclxuXG4gICAgICBoTGluZXNCZWZvcmVSb3cucHVzaChnZXRITGluZXMocGFyc2VyKSk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIGJvZHkucHVzaChyb3cpO1xuICAgICAgYmVnaW5Sb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCAmIG9yIFxcXFxcXFxcIG9yIFxcXFxjciBvciBcXFxcZW5kXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgIH1cbiAgfSAvLyBFbmQgY2VsbCBncm91cFxuXG5cbiAgcGFyc2VyLmd1bGxldC5lbmRHcm91cCgpOyAvLyBFbmQgYXJyYXkgZ3JvdXAgZGVmaW5pbmcgXFxjclxuXG4gIHBhcnNlci5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgYWRkSm90LFxuICAgIGFycmF5c3RyZXRjaCxcbiAgICBib2R5LFxuICAgIGNvbHMsXG4gICAgcm93R2FwcyxcbiAgICBoc2tpcEJlZm9yZUFuZEFmdGVyLFxuICAgIGhMaW5lc0JlZm9yZVJvdyxcbiAgICBjb2xTZXBhcmF0aW9uVHlwZSxcbiAgICB0YWdzLFxuICAgIGxlcW5vXG4gIH07XG59IC8vIERlY2lkZXMgb24gYSBzdHlsZSBmb3IgY2VsbHMgaW4gYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGdpdmVuXG4vLyBlbnZpcm9ubWVudCBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgJ2QnLlxuXG5cbmZ1bmN0aW9uIGRDZWxsU3R5bGUoZW52TmFtZSkge1xuICBpZiAoZW52TmFtZS5zbGljZSgwLCAxKSA9PT0gXCJkXCIpIHtcbiAgICByZXR1cm4gXCJkaXNwbGF5XCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG59XG5cbnZhciBodG1sQnVpbGRlciQ2ID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHI7XG4gIHZhciBjO1xuICB2YXIgbnIgPSBncm91cC5ib2R5Lmxlbmd0aDtcbiAgdmFyIGhMaW5lc0JlZm9yZVJvdyA9IGdyb3VwLmhMaW5lc0JlZm9yZVJvdztcbiAgdmFyIG5jID0gMDtcbiAgdmFyIGJvZHkgPSBuZXcgQXJyYXkobnIpO1xuICB2YXIgaGxpbmVzID0gW107XG4gIHZhciBydWxlVGhpY2tuZXNzID0gTWF0aC5tYXgoIC8vIEZyb20gTGFUZVggXFxzaG93dGhlXFxhcnJheXJ1bGV3aWR0aC4gRXF1YWxzIDAuMDQgZW0uXG4gIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5hcnJheVJ1bGVXaWR0aCwgb3B0aW9ucy5taW5SdWxlVGhpY2tuZXNzIC8vIFVzZXIgb3ZlcnJpZGUuXG4gICk7IC8vIEhvcml6b250YWwgc3BhY2luZ1xuXG4gIHZhciBwdCA9IDEgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgdmFyIGFycmF5Y29sc2VwID0gNSAqIHB0OyAvLyBkZWZhdWx0IHZhbHVlLCBpLmUuIFxcYXJyYXljb2xzZXAgaW4gYXJ0aWNsZS5jbHNcblxuICBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgJiYgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwic21hbGxcIikge1xuICAgIC8vIFdlJ3JlIGluIGEge3NtYWxsbWF0cml4fS4gRGVmYXVsdCBjb2x1bW4gc3BhY2UgaXMgXFx0aGlja3NwYWNlLFxuICAgIC8vIGkuZS4gNS8xOGVtID0gMC4yNzc4ZW0sIHBlciBhbXNtYXRoLmR0eCBmb3Ige3NtYWxsbWF0cml4fS5cbiAgICAvLyBCdXQgdGhhdCBuZWVkcyBhZGp1c3RtZW50IGJlY2F1c2UgTGFUZVggYXBwbGllcyBcXHNjcmlwdHN0eWxlIHRvIHRoZVxuICAgIC8vIGVudGlyZSBhcnJheSwgaW5jbHVkaW5nIHRoZSBjb2xzcGFjZSwgYnV0IHRoaXMgZnVuY3Rpb24gYXBwbGllc1xuICAgIC8vIFxcc2NyaXB0c3R5bGUgb25seSBpbnNpZGUgZWFjaCBlbGVtZW50LlxuICAgIHZhciBsb2NhbE11bHRpcGxpZXIgPSBvcHRpb25zLmhhdmluZ1N0eWxlKFN0eWxlJDEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtcbiAgICBhcnJheWNvbHNlcCA9IDAuMjc3OCAqIChsb2NhbE11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyKTtcbiAgfSAvLyBWZXJ0aWNhbCBzcGFjaW5nXG5cblxuICB2YXIgYmFzZWxpbmVza2lwID0gZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIiA/IGNhbGN1bGF0ZVNpemUoe1xuICAgIG51bWJlcjogMyxcbiAgICB1bml0OiBcImV4XCJcbiAgfSwgb3B0aW9ucykgOiAxMiAqIHB0OyAvLyBzZWUgc2l6ZTEwLmNsb1xuICAvLyBEZWZhdWx0IFxcam90IGZyb20gbHRtYXRoLmR0eFxuICAvLyBUT0RPKGVkZW1haW5lKTogYWxsb3cgb3ZlcnJpZGluZyBcXGpvdCB2aWEgXFxzZXRsZW5ndGggKCM2ODcpXG5cbiAgdmFyIGpvdCA9IDMgKiBwdDtcbiAgdmFyIGFycmF5c2tpcCA9IGdyb3VwLmFycmF5c3RyZXRjaCAqIGJhc2VsaW5lc2tpcDtcbiAgdmFyIGFyc3RydXRIZWlnaHQgPSAwLjcgKiBhcnJheXNraXA7IC8vIFxcc3RydXRib3ggaW4gbHRmc3N0cmMuZHR4IGFuZFxuXG4gIHZhciBhcnN0cnV0RGVwdGggPSAwLjMgKiBhcnJheXNraXA7IC8vIFxcQGFyc3RydXRib3ggaW4gbHR0YWIuZHR4XG5cbiAgdmFyIHRvdGFsSGVpZ2h0ID0gMDsgLy8gU2V0IGEgcG9zaXRpb24gZm9yIFxcaGxpbmUocykgYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXksIGlmIGFueS5cblxuICBmdW5jdGlvbiBzZXRITGluZVBvcyhobGluZXNJbkdhcCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGxpbmVzSW5HYXAubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB0b3RhbEhlaWdodCArPSAwLjI1O1xuICAgICAgfVxuXG4gICAgICBobGluZXMucHVzaCh7XG4gICAgICAgIHBvczogdG90YWxIZWlnaHQsXG4gICAgICAgIGlzRGFzaGVkOiBobGluZXNJbkdhcFtpXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93WzBdKTtcblxuICBmb3IgKHIgPSAwOyByIDwgZ3JvdXAuYm9keS5sZW5ndGg7ICsrcikge1xuICAgIHZhciBpbnJvdyA9IGdyb3VwLmJvZHlbcl07XG4gICAgdmFyIGhlaWdodCA9IGFyc3RydXRIZWlnaHQ7IC8vIFxcQGFycmF5IGFkZHMgYW4gXFxAYXJzdHJ1dFxuXG4gICAgdmFyIGRlcHRoID0gYXJzdHJ1dERlcHRoOyAvLyB0byBlYWNoIHRvdyAodmlhIHRoZSB0ZW1wbGF0ZSlcblxuICAgIGlmIChuYyA8IGlucm93Lmxlbmd0aCkge1xuICAgICAgbmMgPSBpbnJvdy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG91dHJvdyA9IG5ldyBBcnJheShpbnJvdy5sZW5ndGgpO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGlucm93Lmxlbmd0aDsgKytjKSB7XG4gICAgICB2YXIgZWx0ID0gYnVpbGRHcm91cCQxKGlucm93W2NdLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGRlcHRoIDwgZWx0LmRlcHRoKSB7XG4gICAgICAgIGRlcHRoID0gZWx0LmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGVpZ2h0IDwgZWx0LmhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSBlbHQuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBvdXRyb3dbY10gPSBlbHQ7XG4gICAgfVxuXG4gICAgdmFyIHJvd0dhcCA9IGdyb3VwLnJvd0dhcHNbcl07XG4gICAgdmFyIGdhcCA9IDA7XG5cbiAgICBpZiAocm93R2FwKSB7XG4gICAgICBnYXAgPSBjYWxjdWxhdGVTaXplKHJvd0dhcCwgb3B0aW9ucyk7XG5cbiAgICAgIGlmIChnYXAgPiAwKSB7XG4gICAgICAgIC8vIFxcQGFyZ2FycmF5Y3JcbiAgICAgICAgZ2FwICs9IGFyc3RydXREZXB0aDtcblxuICAgICAgICBpZiAoZGVwdGggPCBnYXApIHtcbiAgICAgICAgICBkZXB0aCA9IGdhcDsgLy8gXFxAeGFyZ2FycmF5Y3JcbiAgICAgICAgfVxuXG4gICAgICAgIGdhcCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBJbiBBTVMgbXVsdGlsaW5lIGVudmlyb25tZW50cyBzdWNoIGFzIGFsaWduZWQgYW5kIGdhdGhlcmVkLCByb3dzXG4gICAgLy8gY29ycmVzcG9uZCB0byBsaW5lcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBcXGpvdCBhZGRlZCB0byB0aGVcbiAgICAvLyBcXGJhc2VsaW5lc2tpcCB2aWEgXFxvcGVudXAuXG5cblxuICAgIGlmIChncm91cC5hZGRKb3QpIHtcbiAgICAgIGRlcHRoICs9IGpvdDtcbiAgICB9XG5cbiAgICBvdXRyb3cuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG91dHJvdy5kZXB0aCA9IGRlcHRoO1xuICAgIHRvdGFsSGVpZ2h0ICs9IGhlaWdodDtcbiAgICBvdXRyb3cucG9zID0gdG90YWxIZWlnaHQ7XG4gICAgdG90YWxIZWlnaHQgKz0gZGVwdGggKyBnYXA7IC8vIFxcQHlhcmdhcnJheWNyXG5cbiAgICBib2R5W3JdID0gb3V0cm93OyAvLyBTZXQgYSBwb3NpdGlvbiBmb3IgXFxobGluZShzKSwgaWYgYW55LlxuXG4gICAgc2V0SExpbmVQb3MoaExpbmVzQmVmb3JlUm93W3IgKyAxXSk7XG4gIH1cblxuICB2YXIgb2Zmc2V0ID0gdG90YWxIZWlnaHQgLyAyICsgb3B0aW9ucy5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7XG4gIHZhciBjb2xEZXNjcmlwdGlvbnMgPSBncm91cC5jb2xzIHx8IFtdO1xuICB2YXIgY29scyA9IFtdO1xuICB2YXIgY29sU2VwO1xuICB2YXIgY29sRGVzY3JOdW07XG4gIHZhciB0YWdTcGFucyA9IFtdO1xuXG4gIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3Muc29tZSh0YWcgPT4gdGFnKSkge1xuICAgIC8vIEFuIGVudmlyb25tZW50IHdpdGggbWFudWFsIHRhZ3MgYW5kL29yIGF1dG9tYXRpYyBlcXVhdGlvbiBudW1iZXJzLlxuICAgIC8vIENyZWF0ZSBub2RlKHMpLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHRyaWdnZXIgQ1NTIGNvdW50ZXIgaW5jcmVtZW50LlxuICAgIGZvciAociA9IDA7IHIgPCBucjsgKytyKSB7XG4gICAgICB2YXIgcncgPSBib2R5W3JdO1xuICAgICAgdmFyIHNoaWZ0ID0gcncucG9zIC0gb2Zmc2V0O1xuICAgICAgdmFyIHRhZyA9IGdyb3VwLnRhZ3Nbcl07XG4gICAgICB2YXIgdGFnU3BhbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKHRhZyA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBhdXRvbWF0aWMgbnVtYmVyaW5nXG4gICAgICAgIHRhZ1NwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJlcW4tbnVtXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gXFxub251bWJlci9cXG5vdGFnIG9yIHN0YXJyZWQgZW52aXJvbm1lbnRcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYW51YWwgXFx0YWdcbiAgICAgICAgdGFnU3BhbiA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBidWlsZEV4cHJlc3Npb24kMSh0YWcsIG9wdGlvbnMsIHRydWUpLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGFnU3Bhbi5kZXB0aCA9IHJ3LmRlcHRoO1xuICAgICAgdGFnU3Bhbi5oZWlnaHQgPSBydy5oZWlnaHQ7XG4gICAgICB0YWdTcGFucy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHRhZ1NwYW4sXG4gICAgICAgIHNoaWZ0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGMgPSAwLCBjb2xEZXNjck51bSA9IDA7IC8vIENvbnRpbnVlIHdoaWxlIGVpdGhlciB0aGVyZSBhcmUgbW9yZSBjb2x1bW5zIG9yIG1vcmUgY29sdW1uXG4gIC8vIGRlc2NyaXB0aW9ucywgc28gdHJhaWxpbmcgc2VwYXJhdG9ycyBkb24ndCBnZXQgbG9zdC5cbiAgYyA8IG5jIHx8IGNvbERlc2NyTnVtIDwgY29sRGVzY3JpcHRpb25zLmxlbmd0aDsgKytjLCArK2NvbERlc2NyTnVtKSB7XG4gICAgdmFyIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICB2YXIgZmlyc3RTZXBhcmF0b3IgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGNvbERlc2NyLnR5cGUgPT09IFwic2VwYXJhdG9yXCIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc2VwYXJhdG9yIGluIGEgcm93LCBhZGQgYSBzcGFjZVxuICAgICAgLy8gYmV0d2VlbiB0aGVtLlxuICAgICAgaWYgKCFmaXJzdFNlcGFyYXRvcikge1xuICAgICAgICBjb2xTZXAgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJhcnJheWNvbHNlcFwiXSwgW10pO1xuICAgICAgICBjb2xTZXAuc3R5bGUud2lkdGggPSBtYWtlRW0ob3B0aW9ucy5mb250TWV0cmljcygpLmRvdWJsZVJ1bGVTZXApO1xuICAgICAgICBjb2xzLnB1c2goY29sU2VwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlc2NyLnNlcGFyYXRvciA9PT0gXCJ8XCIgfHwgY29sRGVzY3Iuc2VwYXJhdG9yID09PSBcIjpcIikge1xuICAgICAgICB2YXIgbGluZVR5cGUgPSBjb2xEZXNjci5zZXBhcmF0b3IgPT09IFwifFwiID8gXCJzb2xpZFwiIDogXCJkYXNoZWRcIjtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInZlcnRpY2FsLXNlcGFyYXRvclwiXSwgW10sIG9wdGlvbnMpO1xuICAgICAgICBzZXBhcmF0b3Iuc3R5bGUuaGVpZ2h0ID0gbWFrZUVtKHRvdGFsSGVpZ2h0KTtcbiAgICAgICAgc2VwYXJhdG9yLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0ocnVsZVRoaWNrbmVzcyk7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5ib3JkZXJSaWdodFN0eWxlID0gbGluZVR5cGU7XG4gICAgICAgIHNlcGFyYXRvci5zdHlsZS5tYXJnaW4gPSBcIjAgXCIgKyBtYWtlRW0oLXJ1bGVUaGlja25lc3MgLyAyKTtcblxuICAgICAgICB2YXIgX3NoaWZ0ID0gdG90YWxIZWlnaHQgLSBvZmZzZXQ7XG5cbiAgICAgICAgaWYgKF9zaGlmdCkge1xuICAgICAgICAgIHNlcGFyYXRvci5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1fc2hpZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29scy5wdXNoKHNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6IFwiICsgY29sRGVzY3Iuc2VwYXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgY29sRGVzY3JOdW0rKztcbiAgICAgIGNvbERlc2NyID0gY29sRGVzY3JpcHRpb25zW2NvbERlc2NyTnVtXSB8fCB7fTtcbiAgICAgIGZpcnN0U2VwYXJhdG9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGMgPj0gbmMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzZXB3aWR0aCA9IHZvaWQgMDtcblxuICAgIGlmIChjID4gMCB8fCBncm91cC5oc2tpcEJlZm9yZUFuZEFmdGVyKSB7XG4gICAgICBzZXB3aWR0aCA9IHV0aWxzLmRlZmx0KGNvbERlc2NyLnByZWdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbCA9IFtdO1xuXG4gICAgZm9yIChyID0gMDsgciA8IG5yOyArK3IpIHtcbiAgICAgIHZhciByb3cgPSBib2R5W3JdO1xuICAgICAgdmFyIGVsZW0gPSByb3dbY107XG5cbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9zaGlmdDIgPSByb3cucG9zIC0gb2Zmc2V0O1xuXG4gICAgICBlbGVtLmRlcHRoID0gcm93LmRlcHRoO1xuICAgICAgZWxlbS5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgY29sLnB1c2goe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogZWxlbSxcbiAgICAgICAgc2hpZnQ6IF9zaGlmdDJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogY29sXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgY29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiY29sLWFsaWduLVwiICsgKGNvbERlc2NyLmFsaWduIHx8IFwiY1wiKV0sIFtjb2xdKTtcbiAgICBjb2xzLnB1c2goY29sKTtcblxuICAgIGlmIChjIDwgbmMgLSAxIHx8IGdyb3VwLmhza2lwQmVmb3JlQW5kQWZ0ZXIpIHtcbiAgICAgIHNlcHdpZHRoID0gdXRpbHMuZGVmbHQoY29sRGVzY3IucG9zdGdhcCwgYXJyYXljb2xzZXApO1xuXG4gICAgICBpZiAoc2Vwd2lkdGggIT09IDApIHtcbiAgICAgICAgY29sU2VwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiYXJyYXljb2xzZXBcIl0sIFtdKTtcbiAgICAgICAgY29sU2VwLnN0eWxlLndpZHRoID0gbWFrZUVtKHNlcHdpZHRoKTtcbiAgICAgICAgY29scy5wdXNoKGNvbFNlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm10YWJsZVwiXSwgY29scyk7IC8vIEFkZCBcXGhsaW5lKHMpLCBpZiBhbnkuXG5cbiAgaWYgKGhsaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJobGluZVwiLCBvcHRpb25zLCBydWxlVGhpY2tuZXNzKTtcbiAgICB2YXIgZGFzaGVzID0gYnVpbGRDb21tb24ubWFrZUxpbmVTcGFuKFwiaGRhc2hsaW5lXCIsIG9wdGlvbnMsIHJ1bGVUaGlja25lc3MpO1xuICAgIHZhciB2TGlzdEVsZW1zID0gW3tcbiAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgZWxlbTogYm9keSxcbiAgICAgIHNoaWZ0OiAwXG4gICAgfV07XG5cbiAgICB3aGlsZSAoaGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBobGluZSA9IGhsaW5lcy5wb3AoKTtcbiAgICAgIHZhciBsaW5lU2hpZnQgPSBobGluZS5wb3MgLSBvZmZzZXQ7XG5cbiAgICAgIGlmIChobGluZS5pc0Rhc2hlZCkge1xuICAgICAgICB2TGlzdEVsZW1zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IGRhc2hlcyxcbiAgICAgICAgICBzaGlmdDogbGluZVNoaWZ0XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdkxpc3RFbGVtcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBsaW5lLFxuICAgICAgICAgIHNoaWZ0OiBsaW5lU2hpZnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogdkxpc3RFbGVtc1xuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHRhZ1NwYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBlcW5OdW1Db2wgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IHRhZ1NwYW5zXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgZXFuTnVtQ29sID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGFnXCJdLCBbZXFuTnVtQ29sXSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChbYm9keSwgZXFuTnVtQ29sXSk7XG4gIH1cbn07XG5cbnZhciBhbGlnbk1hcCA9IHtcbiAgYzogXCJjZW50ZXIgXCIsXG4gIGw6IFwibGVmdCBcIixcbiAgcjogXCJyaWdodCBcIlxufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkNSA9IGZ1bmN0aW9uIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgdmFyIHRibCA9IFtdO1xuICB2YXIgZ2x1ZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRkXCIsIFtdLCBbXCJtdHItZ2x1ZVwiXSk7XG4gIHZhciB0YWcgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbXSwgW1wibW1sLWVxbi1udW1cIl0pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuYm9keS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBydyA9IGdyb3VwLmJvZHlbaV07XG4gICAgdmFyIHJvdyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBydy5sZW5ndGg7IGorKykge1xuICAgICAgcm93LnB1c2gobmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW2J1aWxkR3JvdXAocndbal0sIG9wdGlvbnMpXSkpO1xuICAgIH1cblxuICAgIGlmIChncm91cC50YWdzICYmIGdyb3VwLnRhZ3NbaV0pIHtcbiAgICAgIHJvdy51bnNoaWZ0KGdsdWUpO1xuICAgICAgcm93LnB1c2goZ2x1ZSk7XG5cbiAgICAgIGlmIChncm91cC5sZXFubykge1xuICAgICAgICByb3cudW5zaGlmdCh0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93LnB1c2godGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YmwucHVzaChuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10clwiLCByb3cpKTtcbiAgfVxuXG4gIHZhciB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXRhYmxlXCIsIHRibCk7IC8vIFNldCBjb2x1bW4gYWxpZ25tZW50LCByb3cgc3BhY2luZywgY29sdW1uIHNwYWNpbmcsIGFuZFxuICAvLyBhcnJheSBsaW5lcyBieSBzZXR0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIHRhYmxlIGVsZW1lbnQuXG4gIC8vIFNldCB0aGUgcm93IHNwYWNpbmcuIEluIE1hdGhNTCwgd2Ugc3BlY2lmeSBhIGdhcCBkaXN0YW5jZS5cbiAgLy8gV2UgZG8gbm90IHVzZSByb3dHYXBbXSBiZWNhdXNlIE1hdGhNTCBhdXRvbWF0aWNhbGx5IGluY3JlYXNlc1xuICAvLyBjZWxsIGhlaWdodCB3aXRoIHRoZSBoZWlnaHQvZGVwdGggb2YgdGhlIGVsZW1lbnQgY29udGVudC5cbiAgLy8gTGFUZVggXFxhcnJheXN0cmV0Y2ggbXVsdGlwbGllcyB0aGUgcm93IGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlLlxuICAvLyBXZSBzaW11bGF0ZSB0aGlzIGJ5IGFkZGluZyAoYXJyYXlzdHJldGNoIC0gMSllbSB0byB0aGUgZ2FwLiBUaGlzXG4gIC8vIGRvZXMgYSByZWFzb25hYmxlIGpvYiBvZiBhZGp1c3RpbmcgYXJyYXlzIGNvbnRhaW5pbmcgMSBlbSB0YWxsIGNvbnRlbnQuXG4gIC8vIFRoZSAwLjE2IGFuZCAwLjA5IHZhbHVlcyBhcmUgZm91bmQgZW1waXJpY2FsbHkuIFRoZXkgcHJvZHVjZSBhbiBhcnJheVxuICAvLyBzaW1pbGFyIHRvIExhVGVYIGFuZCBpbiB3aGljaCBjb250ZW50IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIFxcaGxpbmVzLlxuXG4gIHZhciBnYXAgPSBncm91cC5hcnJheXN0cmV0Y2ggPT09IDAuNSA/IDAuMSAvLyB7c21hbGxtYXRyaXh9LCB7c3ViYXJyYXl9XG4gIDogMC4xNiArIGdyb3VwLmFycmF5c3RyZXRjaCAtIDEgKyAoZ3JvdXAuYWRkSm90ID8gMC4wOSA6IDApO1xuICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFjaW5nXCIsIG1ha2VFbShnYXApKTsgLy8gTWF0aE1MIHRhYmxlIGxpbmVzIGdvIG9ubHkgYmV0d2VlbiBjZWxscy5cbiAgLy8gVG8gcGxhY2UgYSBsaW5lIG9uIGFuIGVkZ2Ugd2UnbGwgdXNlIDxtZW5jbG9zZT4sIGlmIG5lY2Vzc2FyeS5cblxuICB2YXIgbWVuY2xvc2UgPSBcIlwiO1xuICB2YXIgYWxpZ24gPSBcIlwiO1xuXG4gIGlmIChncm91cC5jb2xzICYmIGdyb3VwLmNvbHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZpbmQgY29sdW1uIGFsaWdubWVudCwgY29sdW1uIHNwYWNpbmcsIGFuZCAgdmVydGljYWwgbGluZXMuXG4gICAgdmFyIGNvbHMgPSBncm91cC5jb2xzO1xuICAgIHZhciBjb2x1bW5MaW5lcyA9IFwiXCI7XG4gICAgdmFyIHByZXZUeXBlV2FzQWxpZ24gPSBmYWxzZTtcbiAgICB2YXIgaVN0YXJ0ID0gMDtcbiAgICB2YXIgaUVuZCA9IGNvbHMubGVuZ3RoO1xuXG4gICAgaWYgKGNvbHNbMF0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJ0b3AgXCI7XG4gICAgICBpU3RhcnQgPSAxO1xuICAgIH1cblxuICAgIGlmIChjb2xzW2NvbHMubGVuZ3RoIC0gMV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgbWVuY2xvc2UgKz0gXCJib3R0b20gXCI7XG4gICAgICBpRW5kIC09IDE7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSBpU3RhcnQ7IF9pIDwgaUVuZDsgX2krKykge1xuICAgICAgaWYgKGNvbHNbX2ldLnR5cGUgPT09IFwiYWxpZ25cIikge1xuICAgICAgICBhbGlnbiArPSBhbGlnbk1hcFtjb2xzW19pXS5hbGlnbl07XG5cbiAgICAgICAgaWYgKHByZXZUeXBlV2FzQWxpZ24pIHtcbiAgICAgICAgICBjb2x1bW5MaW5lcyArPSBcIm5vbmUgXCI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY29sc1tfaV0udHlwZSA9PT0gXCJzZXBhcmF0b3JcIikge1xuICAgICAgICAvLyBNYXRoTUwgYWNjZXB0cyBvbmx5IHNpbmdsZSBsaW5lcyBiZXR3ZWVuIGNlbGxzLlxuICAgICAgICAvLyBTbyB3ZSByZWFkIG9ubHkgdGhlIGZpcnN0IG9mIGNvbnNlY3V0aXZlIHNlcGFyYXRvcnMuXG4gICAgICAgIGlmIChwcmV2VHlwZVdhc0FsaWduKSB7XG4gICAgICAgICAgY29sdW1uTGluZXMgKz0gY29sc1tfaV0uc2VwYXJhdG9yID09PSBcInxcIiA/IFwic29saWQgXCIgOiBcImRhc2hlZCBcIjtcbiAgICAgICAgICBwcmV2VHlwZVdhc0FsaWduID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5hbGlnblwiLCBhbGlnbi50cmltKCkpO1xuXG4gICAgaWYgKC9bc2RdLy50ZXN0KGNvbHVtbkxpbmVzKSkge1xuICAgICAgdGFibGUuc2V0QXR0cmlidXRlKFwiY29sdW1ubGluZXNcIiwgY29sdW1uTGluZXMudHJpbSgpKTtcbiAgICB9XG4gIH0gLy8gU2V0IGNvbHVtbiBzcGFjaW5nLlxuXG5cbiAgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcImFsaWduXCIpIHtcbiAgICB2YXIgX2NvbHMgPSBncm91cC5jb2xzIHx8IFtdO1xuXG4gICAgdmFyIHNwYWNpbmcgPSBcIlwiO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgX2NvbHMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgc3BhY2luZyArPSBfaTIgJSAyID8gXCIwZW0gXCIgOiBcIjFlbSBcIjtcbiAgICB9XG5cbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIHNwYWNpbmcudHJpbSgpKTtcbiAgfSBlbHNlIGlmIChncm91cC5jb2xTZXBhcmF0aW9uVHlwZSA9PT0gXCJhbGlnbmF0XCIgfHwgZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiZ2F0aGVyXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMGVtXCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmNvbFNlcGFyYXRpb25UeXBlID09PSBcInNtYWxsXCIpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMC4yNzc4ZW1cIik7XG4gIH0gZWxzZSBpZiAoZ3JvdXAuY29sU2VwYXJhdGlvblR5cGUgPT09IFwiQ0RcIikge1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcImNvbHVtbnNwYWNpbmdcIiwgXCIwLjVlbVwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJjb2x1bW5zcGFjaW5nXCIsIFwiMWVtXCIpO1xuICB9IC8vIEFkZHJlc3MgXFxobGluZSBhbmQgXFxoZGFzaGxpbmVcblxuXG4gIHZhciByb3dMaW5lcyA9IFwiXCI7XG4gIHZhciBobGluZXMgPSBncm91cC5oTGluZXNCZWZvcmVSb3c7XG4gIG1lbmNsb3NlICs9IGhsaW5lc1swXS5sZW5ndGggPiAwID8gXCJsZWZ0IFwiIDogXCJcIjtcbiAgbWVuY2xvc2UgKz0gaGxpbmVzW2hsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggPiAwID8gXCJyaWdodCBcIiA6IFwiXCI7XG5cbiAgZm9yICh2YXIgX2kzID0gMTsgX2kzIDwgaGxpbmVzLmxlbmd0aCAtIDE7IF9pMysrKSB7XG4gICAgcm93TGluZXMgKz0gaGxpbmVzW19pM10ubGVuZ3RoID09PSAwID8gXCJub25lIFwiIC8vIE1hdGhNTCBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgbGluZSBiZXR3ZWVuIHJvd3MuIFJlYWQgb25lIGVsZW1lbnQuXG4gICAgOiBobGluZXNbX2kzXVswXSA/IFwiZGFzaGVkIFwiIDogXCJzb2xpZCBcIjtcbiAgfVxuXG4gIGlmICgvW3NkXS8udGVzdChyb3dMaW5lcykpIHtcbiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoXCJyb3dsaW5lc1wiLCByb3dMaW5lcy50cmltKCkpO1xuICB9XG5cbiAgaWYgKG1lbmNsb3NlICE9PSBcIlwiKSB7XG4gICAgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1lbmNsb3NlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcIm5vdGF0aW9uXCIsIG1lbmNsb3NlLnRyaW0oKSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuYXJyYXlzdHJldGNoICYmIGdyb3VwLmFycmF5c3RyZXRjaCA8IDEpIHtcbiAgICAvLyBBIHNtYWxsIGFycmF5LiBXcmFwIGluIHNjcmlwdHN0eWxlIHNvIHJvdyBnYXAgaXMgbm90IHRvbyBsYXJnZS5cbiAgICB0YWJsZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIFt0YWJsZV0pO1xuICAgIHRhYmxlLnNldEF0dHJpYnV0ZShcInNjcmlwdGxldmVsXCIsIFwiMVwiKTtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn07IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhbGlnbiwgYWxpZ24qLCBhbGlnbmVkLCBhbGlnbmF0LCBhbGlnbmF0KiwgYWxpZ25lZGF0LlxuXG5cbnZhciBhbGlnbmVkSGFuZGxlciA9IGZ1bmN0aW9uIGFsaWduZWRIYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgaWYgKGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiZWRcIikgPT09IC0xKSB7XG4gICAgdmFsaWRhdGVBbXNFbnZpcm9ubWVudENvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICB2YXIgY29scyA9IFtdO1xuICB2YXIgc2VwYXJhdGlvblR5cGUgPSBjb250ZXh0LmVudk5hbWUuaW5kZXhPZihcImF0XCIpID4gLTEgPyBcImFsaWduYXRcIiA6IFwiYWxpZ25cIjtcbiAgdmFyIGlzU3BsaXQgPSBjb250ZXh0LmVudk5hbWUgPT09IFwic3BsaXRcIjtcbiAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHtcbiAgICBjb2xzLFxuICAgIGFkZEpvdDogdHJ1ZSxcbiAgICBhdXRvVGFnOiBpc1NwbGl0ID8gdW5kZWZpbmVkIDogZ2V0QXV0b1RhZyhjb250ZXh0LmVudk5hbWUpLFxuICAgIGVtcHR5U2luZ2xlUm93OiB0cnVlLFxuICAgIGNvbFNlcGFyYXRpb25UeXBlOiBzZXBhcmF0aW9uVHlwZSxcbiAgICBtYXhOdW1Db2xzOiBpc1NwbGl0ID8gMiA6IHVuZGVmaW5lZCxcbiAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgfSwgXCJkaXNwbGF5XCIpOyAvLyBEZXRlcm1pbmluZyBudW1iZXIgb2YgY29sdW1ucy5cbiAgLy8gMS4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdpdmVuLCB3ZSB1c2UgaXQgYXMgYSBudW1iZXIgb2YgY29sdW1ucyxcbiAgLy8gICAgYW5kIG1ha2VzIHN1cmUgdGhhdCBlYWNoIHJvdyBkb2Vzbid0IGV4Y2VlZCB0aGF0IG51bWJlci5cbiAgLy8gMi4gT3RoZXJ3aXNlLCBqdXN0IGNvdW50IG51bWJlciBvZiBjb2x1bW5zID0gbWF4aW11bSBudW1iZXJcbiAgLy8gICAgb2YgY2VsbHMgaW4gZWFjaCByb3cgKFwiYWxpZ25lZFwiIG1vZGUgLS0gaXNBbGlnbmVkIHdpbGwgYmUgdHJ1ZSkuXG4gIC8vXG4gIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByZXBlbmQgZW1wdHkgZ3JvdXAge30gYXQgYmVnaW5uaW5nIG9mIGV2ZXJ5IHNlY29uZFxuICAvLyBjZWxsIGluIGVhY2ggcm93IChzdGFydGluZyB3aXRoIHNlY29uZCBjZWxsKSBzbyB0aGF0IG9wZXJhdG9ycyBiZWNvbWVcbiAgLy8gYmluYXJ5LiAgVGhpcyBiZWhhdmlvciBpcyBpbXBsZW1lbnRlZCBpbiBhbXNtYXRoJ3MgXFxzdGFydEBhbGlnbmVkLlxuXG4gIHZhciBudW1NYXRocztcbiAgdmFyIG51bUNvbHMgPSAwO1xuICB2YXIgZW1wdHlHcm91cCA9IHtcbiAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgIGJvZHk6IFtdXG4gIH07XG5cbiAgaWYgKGFyZ3NbMF0gJiYgYXJnc1swXS50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICB2YXIgYXJnMCA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NbMF0uYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRleHRvcmQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLmJvZHlbaV0sIFwidGV4dG9yZFwiKTtcbiAgICAgIGFyZzAgKz0gdGV4dG9yZC50ZXh0O1xuICAgIH1cblxuICAgIG51bU1hdGhzID0gTnVtYmVyKGFyZzApO1xuICAgIG51bUNvbHMgPSBudW1NYXRocyAqIDI7XG4gIH1cblxuICB2YXIgaXNBbGlnbmVkID0gIW51bUNvbHM7XG4gIHJlcy5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgIGZvciAodmFyIF9pNCA9IDE7IF9pNCA8IHJvdy5sZW5ndGg7IF9pNCArPSAyKSB7XG4gICAgICAvLyBNb2RpZnkgb3JkZ3JvdXAgbm9kZSB3aXRoaW4gc3R5bGluZyBub2RlXG4gICAgICB2YXIgc3R5bGluZyA9IGFzc2VydE5vZGVUeXBlKHJvd1tfaTRdLCBcInN0eWxpbmdcIik7XG4gICAgICB2YXIgb3JkZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShzdHlsaW5nLmJvZHlbMF0sIFwib3JkZ3JvdXBcIik7XG4gICAgICBvcmRncm91cC5ib2R5LnVuc2hpZnQoZW1wdHlHcm91cCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FsaWduZWQpIHtcbiAgICAgIC8vIENhc2UgMVxuICAgICAgdmFyIGN1ck1hdGhzID0gcm93Lmxlbmd0aCAvIDI7XG5cbiAgICAgIGlmIChudW1NYXRocyA8IGN1ck1hdGhzKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgbWF0aCBpbiBhIHJvdzogXCIgKyAoXCJleHBlY3RlZCBcIiArIG51bU1hdGhzICsgXCIsIGJ1dCBnb3QgXCIgKyBjdXJNYXRocyksIHJvd1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChudW1Db2xzIDwgcm93Lmxlbmd0aCkge1xuICAgICAgLy8gQ2FzZSAyXG4gICAgICBudW1Db2xzID0gcm93Lmxlbmd0aDtcbiAgICB9XG4gIH0pOyAvLyBBZGp1c3RpbmcgYWxpZ25tZW50LlxuICAvLyBJbiBhbGlnbmVkIG1vZGUsIHdlIGFkZCBvbmUgXFxxcXVhZCBiZXR3ZWVuIGNvbHVtbnM7XG4gIC8vIG90aGVyd2lzZSB3ZSBhZGQgbm90aGluZy5cblxuICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCBudW1Db2xzOyArK19pNSkge1xuICAgIHZhciBhbGlnbiA9IFwiclwiO1xuICAgIHZhciBwcmVnYXAgPSAwO1xuXG4gICAgaWYgKF9pNSAlIDIgPT09IDEpIHtcbiAgICAgIGFsaWduID0gXCJsXCI7XG4gICAgfSBlbHNlIGlmIChfaTUgPiAwICYmIGlzQWxpZ25lZCkge1xuICAgICAgLy8gXCJhbGlnbmVkXCIgbW9kZS5cbiAgICAgIHByZWdhcCA9IDE7IC8vIGFkZCBvbmUgXFxxdWFkXG4gICAgfVxuXG4gICAgY29sc1tfaTVdID0ge1xuICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgYWxpZ246IGFsaWduLFxuICAgICAgcHJlZ2FwOiBwcmVnYXAsXG4gICAgICBwb3N0Z2FwOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJlcy5jb2xTZXBhcmF0aW9uVHlwZSA9IGlzQWxpZ25lZCA/IFwiYWxpZ25cIiA6IFwiYWxpZ25hdFwiO1xuICByZXR1cm4gcmVzO1xufTsgLy8gQXJyYXlzIGFyZSBwYXJ0IG9mIExhVGVYLCBkZWZpbmVkIGluIGx0dGFiLmR0eCBzbyBpdHMgZG9jdW1lbnRhdGlvblxuLy8gaXMgcGFydCBvZiB0aGUgc291cmNlMmUucGRmIGZpbGUgb2YgTGFUZVgyZSBzb3VyY2UgZG9jdW1lbnRhdGlvbi5cbi8vIHtkYXJyYXl9IGlzIGFuIHthcnJheX0gZW52aXJvbm1lbnQgd2hlcmUgY2VsbHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZSxcbi8vIGFzIGRlZmluZWQgaW4gbmNjbWF0aC5zdHkuXG5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJhcnJheVwiLCBcImRhcnJheVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgLy8gU2luY2Ugbm8gdHlwZXMgYXJlIHNwZWNpZmllZCBhYm92ZSwgdGhlIHR3byBwb3NzaWJpbGl0aWVzIGFyZVxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIHdyYXBwZWQgaW4ge30gb3IgW10sIGluIHdoaWNoIGNhc2UgUGFyc2VyJ3NcbiAgICAvLyAgIHBhcnNlR3JvdXAoKSByZXR1cm5zIGFuIFwib3JkZ3JvdXBcIiB3cmFwcGluZyBzb21lIHN5bWJvbCBub2RlLlxuICAgIC8vIC0gVGhlIGFyZ3VtZW50IGlzIGEgYmFyZSBzeW1ib2wgbm9kZS5cbiAgICB2YXIgc3ltTm9kZSA9IGNoZWNrU3ltYm9sTm9kZVR5cGUoYXJnc1swXSk7XG4gICAgdmFyIGNvbGFsaWduID0gc3ltTm9kZSA/IFthcmdzWzBdXSA6IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwib3JkZ3JvdXBcIikuYm9keTtcbiAgICB2YXIgY29scyA9IGNvbGFsaWduLm1hcChmdW5jdGlvbiAobmRlKSB7XG4gICAgICB2YXIgbm9kZSA9IGFzc2VydFN5bWJvbE5vZGVUeXBlKG5kZSk7XG4gICAgICB2YXIgY2EgPSBub2RlLnRleHQ7XG5cbiAgICAgIGlmIChcImxjclwiLmluZGV4T2YoY2EpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgICAgICBhbGlnbjogY2FcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoY2EgPT09IFwifFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICBzZXBhcmF0b3I6IFwifFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGNhID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgc2VwYXJhdG9yOiBcIjpcIlxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29scyxcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IHRydWUsXG4gICAgICAvLyBcXEBwcmVhbWJsZSBpbiBsdHRhYi5kdHhcbiAgICAgIG1heE51bUNvbHM6IGNvbHMubGVuZ3RoXG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcmVzLCBkQ2VsbFN0eWxlKGNvbnRleHQuZW52TmFtZSkpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBUaGUgbWF0cml4IGVudmlyb25tZW50cyBvZiBhbXNtYXRoIGJ1aWxkcyBvbiB0aGUgYXJyYXkgZW52aXJvbm1lbnRcbi8vIG9mIExhVGVYLCB3aGljaCBpcyBkaXNjdXNzZWQgYWJvdmUuXG4vLyBUaGUgbWF0aHRvb2xzIHBhY2thZ2UgYWRkcyBzdGFycmVkIHZlcnNpb25zIG9mIHRoZSBzYW1lIGVudmlyb25tZW50cy5cbi8vIFRoZXNlIGhhdmUgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gY2hvb3NlIGxlZnR8Y2VudGVyfHJpZ2h0IGp1c3RpZmljYXRpb24uXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wibWF0cml4XCIsIFwicG1hdHJpeFwiLCBcImJtYXRyaXhcIiwgXCJCbWF0cml4XCIsIFwidm1hdHJpeFwiLCBcIlZtYXRyaXhcIiwgXCJtYXRyaXgqXCIsIFwicG1hdHJpeCpcIiwgXCJibWF0cml4KlwiLCBcIkJtYXRyaXgqXCIsIFwidm1hdHJpeCpcIiwgXCJWbWF0cml4KlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0KSB7XG4gICAgdmFyIGRlbGltaXRlcnMgPSB7XG4gICAgICBcIm1hdHJpeFwiOiBudWxsLFxuICAgICAgXCJwbWF0cml4XCI6IFtcIihcIiwgXCIpXCJdLFxuICAgICAgXCJibWF0cml4XCI6IFtcIltcIiwgXCJdXCJdLFxuICAgICAgXCJCbWF0cml4XCI6IFtcIlxcXFx7XCIsIFwiXFxcXH1cIl0sXG4gICAgICBcInZtYXRyaXhcIjogW1wifFwiLCBcInxcIl0sXG4gICAgICBcIlZtYXRyaXhcIjogW1wiXFxcXFZlcnRcIiwgXCJcXFxcVmVydFwiXVxuICAgIH1bY29udGV4dC5lbnZOYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpXTsgLy8gXFxoc2tpcCAtXFxhcnJheWNvbHNlcCBpbiBhbXNtYXRoXG5cbiAgICB2YXIgY29sQWxpZ24gPSBcImNcIjtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGhza2lwQmVmb3JlQW5kQWZ0ZXI6IGZhbHNlLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogY29sQWxpZ25cbiAgICAgIH1dXG4gICAgfTtcblxuICAgIGlmIChjb250ZXh0LmVudk5hbWUuY2hhckF0KGNvbnRleHQuZW52TmFtZS5sZW5ndGggLSAxKSA9PT0gXCIqXCIpIHtcbiAgICAgIC8vIEl0J3Mgb25lIG9mIHRoZSBtYXRodG9vbHMgc3RhcnJlZCBmdW5jdGlvbnMuXG4gICAgICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgYWxpZ25tZW50IGFyZ3VtZW50LlxuICAgICAgdmFyIHBhcnNlciA9IGNvbnRleHQucGFyc2VyO1xuICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcblxuICAgICAgaWYgKHBhcnNlci5mZXRjaCgpLnRleHQgPT09IFwiW1wiKSB7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBhcnNlci5jb25zdW1lU3BhY2VzKCk7XG4gICAgICAgIGNvbEFsaWduID0gcGFyc2VyLmZldGNoKCkudGV4dDtcblxuICAgICAgICBpZiAoXCJsY3JcIi5pbmRleE9mKGNvbEFsaWduKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4cGVjdGVkIGwgb3IgYyBvciByXCIsIHBhcnNlci5uZXh0VG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLmNvbnN1bWUoKTtcbiAgICAgICAgcGFyc2VyLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgICAgcGFyc2VyLmV4cGVjdChcIl1cIik7XG4gICAgICAgIHBhcnNlci5jb25zdW1lKCk7XG4gICAgICAgIHBheWxvYWQuY29scyA9IFt7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgZENlbGxTdHlsZShjb250ZXh0LmVudk5hbWUpKTsgLy8gUG9wdWxhdGUgY29scyB3aXRoIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW4gYWxpZ25tZW50IHNwZWNzLlxuXG4gICAgdmFyIG51bUNvbHMgPSBNYXRoLm1heCgwLCAuLi5yZXMuYm9keS5tYXAocm93ID0+IHJvdy5sZW5ndGgpKTtcbiAgICByZXMuY29scyA9IG5ldyBBcnJheShudW1Db2xzKS5maWxsKHtcbiAgICAgIHR5cGU6IFwiYWxpZ25cIixcbiAgICAgIGFsaWduOiBjb2xBbGlnblxuICAgIH0pO1xuICAgIHJldHVybiBkZWxpbWl0ZXJzID8ge1xuICAgICAgdHlwZTogXCJsZWZ0cmlnaHRcIixcbiAgICAgIG1vZGU6IGNvbnRleHQubW9kZSxcbiAgICAgIGJvZHk6IFtyZXNdLFxuICAgICAgbGVmdDogZGVsaW1pdGVyc1swXSxcbiAgICAgIHJpZ2h0OiBkZWxpbWl0ZXJzWzFdLFxuICAgICAgcmlnaHRDb2xvcjogdW5kZWZpbmVkIC8vIFxccmlnaHQgdW5pbmZsdWVuY2VkIGJ5IFxcY29sb3IgaW4gYXJyYXlcblxuICAgIH0gOiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInNtYWxsbWF0cml4XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICB2YXIgcmVzID0gcGFyc2VBcnJheShjb250ZXh0LnBhcnNlciwgcGF5bG9hZCwgXCJzY3JpcHRcIik7XG4gICAgcmVzLmNvbFNlcGFyYXRpb25UeXBlID0gXCJzbWFsbFwiO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7XG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcInN1YmFycmF5XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDFcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQsIGFyZ3MpIHtcbiAgICAvLyBQYXJzaW5nIG9mIHtzdWJhcnJheX0gaXMgc2ltaWxhciB0byB7YXJyYXl9XG4gICAgdmFyIHN5bU5vZGUgPSBjaGVja1N5bWJvbE5vZGVUeXBlKGFyZ3NbMF0pO1xuICAgIHZhciBjb2xhbGlnbiA9IHN5bU5vZGUgPyBbYXJnc1swXV0gOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcIm9yZGdyb3VwXCIpLmJvZHk7XG4gICAgdmFyIGNvbHMgPSBjb2xhbGlnbi5tYXAoZnVuY3Rpb24gKG5kZSkge1xuICAgICAgdmFyIG5vZGUgPSBhc3NlcnRTeW1ib2xOb2RlVHlwZShuZGUpO1xuICAgICAgdmFyIGNhID0gbm9kZS50ZXh0OyAvLyB7c3ViYXJyYXl9IG9ubHkgcmVjb2duaXplcyBcImxcIiAmIFwiY1wiXG5cbiAgICAgIGlmIChcImxjXCIuaW5kZXhPZihjYSkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICAgIGFsaWduOiBjYVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gY29sdW1uIGFsaWdubWVudDogXCIgKyBjYSwgbmRlKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW5cIik7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIGNvbHMsXG4gICAgICBoc2tpcEJlZm9yZUFuZEFmdGVyOiBmYWxzZSxcbiAgICAgIGFycmF5c3RyZXRjaDogMC41XG4gICAgfTtcbiAgICByZXMgPSBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwic2NyaXB0XCIpO1xuXG4gICAgaWYgKHJlcy5ib2R5Lmxlbmd0aCA+IDAgJiYgcmVzLmJvZHlbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJ7c3ViYXJyYXl9IGNhbiBjb250YWluIG9ubHkgb25lIGNvbHVtblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBBIGNhc2VzIGVudmlyb25tZW50IChpbiBhbXNtYXRoLnN0eSkgaXMgYWxtb3N0IGVxdWl2YWxlbnQgdG9cbi8vIFxcZGVmXFxhcnJheXN0cmV0Y2h7MS4yfSVcbi8vIFxcbGVmdFxce1xcYmVnaW57YXJyYXl9e0B7fWxAe1xccXVhZH1sQHt9fSDigKYgXFxlbmR7YXJyYXl9XFxyaWdodC5cbi8vIHtkY2FzZXN9IGlzIGEge2Nhc2VzfSBlbnZpcm9ubWVudCB3aGVyZSBjZWxscyBhcmUgc2V0IGluIFxcZGlzcGxheXN0eWxlLFxuLy8gYXMgZGVmaW5lZCBpbiBtYXRodG9vbHMuc3R5LlxuLy8ge3JjYXNlc30gaXMgYW5vdGhlciBtYXRodG9vbHMgZW52aXJvbm1lbnQuIEl0J3MgYnJhY2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiY2FzZXNcIiwgXCJkY2FzZXNcIiwgXCJyY2FzZXNcIiwgXCJkcmNhc2VzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKGNvbnRleHQpIHtcbiAgICB2YXIgcGF5bG9hZCA9IHtcbiAgICAgIGFycmF5c3RyZXRjaDogMS4yLFxuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJsXCIsXG4gICAgICAgIHByZWdhcDogMCxcbiAgICAgICAgLy8gVE9ETyhrZXZpbmIpIGdldCB0aGUgY3VycmVudCBzdHlsZS5cbiAgICAgICAgLy8gRm9yIG5vdyB3ZSB1c2UgdGhlIG1ldHJpY3MgZm9yIFRFWFQgc3R5bGUgd2hpY2ggaXMgd2hhdCB3ZSB3ZXJlXG4gICAgICAgIC8vIGRvaW5nIGJlZm9yZS4gIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGdldCB0aGUgY3VycmVudCBzdHlsZSB3ZVxuICAgICAgICAvLyBzaG91bGQgbG9vayBhdCBUZVgncyBiZWhhdmlvciBlc3BlY2lhbGx5IGZvciBcXG92ZXIgYW5kIG1hdHJpY2VzLlxuICAgICAgICBwb3N0Z2FwOiAxLjBcbiAgICAgICAgLyogMWVtIHF1YWQgKi9cblxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImFsaWduXCIsXG4gICAgICAgIGFsaWduOiBcImxcIixcbiAgICAgICAgcHJlZ2FwOiAwLFxuICAgICAgICBwb3N0Z2FwOiAwXG4gICAgICB9XVxuICAgIH07XG4gICAgdmFyIHJlcyA9IHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHBheWxvYWQsIGRDZWxsU3R5bGUoY29udGV4dC5lbnZOYW1lKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibGVmdHJpZ2h0XCIsXG4gICAgICBtb2RlOiBjb250ZXh0Lm1vZGUsXG4gICAgICBib2R5OiBbcmVzXSxcbiAgICAgIGxlZnQ6IGNvbnRleHQuZW52TmFtZS5pbmRleE9mKFwiclwiKSA+IC0xID8gXCIuXCIgOiBcIlxcXFx7XCIsXG4gICAgICByaWdodDogY29udGV4dC5lbnZOYW1lLmluZGV4T2YoXCJyXCIpID4gLTEgPyBcIlxcXFx9XCIgOiBcIi5cIixcbiAgICAgIHJpZ2h0Q29sb3I6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEluIHRoZSBhbGlnbiBlbnZpcm9ubWVudCwgb25lIHVzZXMgYW1wZXJzYW5kcywgJiwgdG8gc3BlY2lmeSBudW1iZXIgb2Zcbi8vIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCB0byBsb2NhdGUgc3BhY2luZyBiZXR3ZWVuIGVhY2ggY29sdW1uLlxuLy8gYWxpZ24gZ2V0cyBhdXRvbWF0aWMgbnVtYmVyaW5nLiBhbGlnbiogYW5kIGFsaWduZWQgZG8gbm90LlxuLy8gVGhlIGFsaWduZWRhdCBlbnZpcm9ubWVudCBjYW4gYmUgdXNlZCBpbiBtYXRoIG1vZGUuXG4vLyBOb3RlIHRoYXQgd2UgYXNzdW1lIFxcbm9tYWxsaW5lc2tpcGxpbWl0IHRvIGJlIHplcm8sXG4vLyBzbyB0aGF0IFxcc3RydXRAIGlzIHRoZSBzYW1lIGFzIFxcc3RydXQuXG5cbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiYWxpZ25cIiwgXCJhbGlnbipcIiwgXCJhbGlnbmVkXCIsIFwic3BsaXRcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuICBoYW5kbGVyOiBhbGlnbmVkSGFuZGxlcixcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDYsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkNVxufSk7IC8vIEEgZ2F0aGVyZWQgZW52aXJvbm1lbnQgaXMgbGlrZSBhbiBhcnJheSBlbnZpcm9ubWVudCB3aXRoIG9uZSBjZW50ZXJlZFxuLy8gY29sdW1uLCBidXQgd2hlcmUgcm93cyBhcmUgY29uc2lkZXJlZCBsaW5lcyBzbyBnZXQgXFxqb3QgbGluZSBzcGFjaW5nXG4vLyBhbmQgY29udGVudHMgYXJlIHNldCBpbiBcXGRpc3BsYXlzdHlsZS5cblxuZGVmaW5lRW52aXJvbm1lbnQoe1xuICB0eXBlOiBcImFycmF5XCIsXG4gIG5hbWVzOiBbXCJnYXRoZXJlZFwiLCBcImdhdGhlclwiLCBcImdhdGhlcipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbXCJnYXRoZXJcIiwgXCJnYXRoZXIqXCJdLCBjb250ZXh0LmVudk5hbWUpKSB7XG4gICAgICB2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dChjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0ge1xuICAgICAgY29sczogW3tcbiAgICAgICAgdHlwZTogXCJhbGlnblwiLFxuICAgICAgICBhbGlnbjogXCJjXCJcbiAgICAgIH1dLFxuICAgICAgYWRkSm90OiB0cnVlLFxuICAgICAgY29sU2VwYXJhdGlvblR5cGU6IFwiZ2F0aGVyXCIsXG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIGxlcW5vOiBjb250ZXh0LnBhcnNlci5zZXR0aW5ncy5sZXFub1xuICAgIH07XG4gICAgcmV0dXJuIHBhcnNlQXJyYXkoY29udGV4dC5wYXJzZXIsIHJlcywgXCJkaXNwbGF5XCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ2LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDVcbn0pOyAvLyBhbGlnbmF0IGVudmlyb25tZW50IGlzIGxpa2UgYW4gYWxpZ24gZW52aXJvbm1lbnQsIGJ1dCBvbmUgbXVzdCBleHBsaWNpdGx5XG4vLyBzcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgaW4gZWFjaCByb3csIGFuZCBjYW4gYWRqdXN0IHNwYWNpbmcgYmV0d2VlblxuLy8gZWFjaCBjb2x1bW5zLlxuXG5kZWZpbmVFbnZpcm9ubWVudCh7XG4gIHR5cGU6IFwiYXJyYXlcIixcbiAgbmFtZXM6IFtcImFsaWduYXRcIiwgXCJhbGlnbmF0KlwiLCBcImFsaWduZWRhdFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG4gIGhhbmRsZXI6IGFsaWduZWRIYW5kbGVyLFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiZXF1YXRpb25cIiwgXCJlcXVhdGlvbipcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB7XG4gICAgICBhdXRvVGFnOiBnZXRBdXRvVGFnKGNvbnRleHQuZW52TmFtZSksXG4gICAgICBlbXB0eVNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIHNpbmdsZVJvdzogdHJ1ZSxcbiAgICAgIG1heE51bUNvbHM6IDEsXG4gICAgICBsZXFubzogY29udGV4dC5wYXJzZXIuc2V0dGluZ3MubGVxbm9cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZUFycmF5KGNvbnRleHQucGFyc2VyLCByZXMsIFwiZGlzcGxheVwiKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZUVudmlyb25tZW50KHtcbiAgdHlwZTogXCJhcnJheVwiLFxuICBuYW1lczogW1wiQ0RcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCkge1xuICAgIHZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiBwYXJzZUNEKGNvbnRleHQucGFyc2VyKTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNixcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQ1XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXG5vbnVtYmVyXCIsIFwiXFxcXGdkZWZcXFxcQGVxbnN3ezB9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90YWdcIiwgXCJcXFxcbm9udW1iZXJcIik7IC8vIENhdGNoIFxcaGxpbmUgb3V0c2lkZSBhcnJheSBlbnZpcm9ubWVudFxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICAvLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoaXMgaXMuXG4gIG5hbWVzOiBbXCJcXFxcaGxpbmVcIiwgXCJcXFxcaGRhc2hsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoY29udGV4dC5mdW5jTmFtZSArIFwiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50XCIpO1xuICB9XG5cbn0pO1xuXG52YXIgZW52aXJvbm1lbnRzID0gX2Vudmlyb25tZW50cztcblxuLy8gZGVmaW5lRW52aXJvbm1lbnQgZGVmaW5pdGlvbnMuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJlbnZpcm9ubWVudFwiLFxuICBuYW1lczogW1wiXFxcXGJlZ2luXCIsIFwiXFxcXGVuZFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJ0ZXh0XCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIG5hbWVHcm91cCA9IGFyZ3NbMF07XG5cbiAgICBpZiAobmFtZUdyb3VwLnR5cGUgIT09IFwib3JkZ3JvdXBcIikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWVcIiwgbmFtZUdyb3VwKTtcbiAgICB9XG5cbiAgICB2YXIgZW52TmFtZSA9IFwiXCI7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVHcm91cC5ib2R5Lmxlbmd0aDsgKytpKSB7XG4gICAgICBlbnZOYW1lICs9IGFzc2VydE5vZGVUeXBlKG5hbWVHcm91cC5ib2R5W2ldLCBcInRleHRvcmRcIikudGV4dDtcbiAgICB9XG5cbiAgICBpZiAoZnVuY05hbWUgPT09IFwiXFxcXGJlZ2luXCIpIHtcbiAgICAgIC8vIGJlZ2luLi4uZW5kIGlzIHNpbWlsYXIgdG8gbGVmdC4uLnJpZ2h0XG4gICAgICBpZiAoIWVudmlyb25tZW50cy5oYXNPd25Qcm9wZXJ0eShlbnZOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIk5vIHN1Y2ggZW52aXJvbm1lbnQ6IFwiICsgZW52TmFtZSwgbmFtZUdyb3VwKTtcbiAgICAgIH0gLy8gQnVpbGQgdGhlIGVudmlyb25tZW50IG9iamVjdC4gQXJndW1lbnRzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiB3aWxsXG4gICAgICAvLyBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgYmVnaW4gYW5kIGVuZCBtZXRob2RzIHVzaW5nIHByb3BlcnRpZXMuXG5cblxuICAgICAgdmFyIGVudiA9IGVudmlyb25tZW50c1tlbnZOYW1lXTtcbiAgICAgIHZhciB7XG4gICAgICAgIGFyZ3M6IF9hcmdzLFxuICAgICAgICBvcHRBcmdzXG4gICAgICB9ID0gcGFyc2VyLnBhcnNlQXJndW1lbnRzKFwiXFxcXGJlZ2lue1wiICsgZW52TmFtZSArIFwifVwiLCBlbnYpO1xuICAgICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgICBlbnZOYW1lLFxuICAgICAgICBwYXJzZXJcbiAgICAgIH07XG4gICAgICB2YXIgcmVzdWx0ID0gZW52LmhhbmRsZXIoY29udGV4dCwgX2FyZ3MsIG9wdEFyZ3MpO1xuICAgICAgcGFyc2VyLmV4cGVjdChcIlxcXFxlbmRcIiwgZmFsc2UpO1xuICAgICAgdmFyIGVuZE5hbWVUb2tlbiA9IHBhcnNlci5uZXh0VG9rZW47XG4gICAgICB2YXIgZW5kID0gYXNzZXJ0Tm9kZVR5cGUocGFyc2VyLnBhcnNlRnVuY3Rpb24oKSwgXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgaWYgKGVuZC5uYW1lICE9PSBlbnZOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTWlzbWF0Y2g6IFxcXFxiZWdpbntcIiArIGVudk5hbWUgKyBcIn0gbWF0Y2hlZCBieSBcXFxcZW5ke1wiICsgZW5kLm5hbWUgKyBcIn1cIiwgZW5kTmFtZVRva2VuKTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZSwgXCJlbnZpcm9ubWVudFwiIGhhbmRsZXIgcmV0dXJucyBhbiBlbnZpcm9ubWVudCBQYXJzZU5vZGVcblxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVudmlyb25tZW50XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG5hbWU6IGVudk5hbWUsXG4gICAgICBuYW1lR3JvdXBcbiAgICB9O1xuICB9XG5cbn0pO1xuXG4vLyBUT0RPKGtldmluYik6IGltcGxlbWVudCBcXFxcc2wgYW5kIFxcXFxzY1xuXG52YXIgaHRtbEJ1aWxkZXIkNSA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgZm9udCA9IGdyb3VwLmZvbnQ7XG4gIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy53aXRoRm9udChmb250KTtcbiAgcmV0dXJuIGJ1aWxkR3JvdXAkMShncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250O1xuICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMud2l0aEZvbnQoZm9udCk7XG4gIHJldHVybiBidWlsZEdyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xufTtcblxudmFyIGZvbnRBbGlhc2VzID0ge1xuICBcIlxcXFxCYmJcIjogXCJcXFxcbWF0aGJiXCIsXG4gIFwiXFxcXGJvbGRcIjogXCJcXFxcbWF0aGJmXCIsXG4gIFwiXFxcXGZyYWtcIjogXCJcXFxcbWF0aGZyYWtcIixcbiAgXCJcXFxcYm1cIjogXCJcXFxcYm9sZHN5bWJvbFwiXG59O1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFsvLyBzdHlsZXMsIGV4Y2VwdCBcXGJvbGRzeW1ib2wgZGVmaW5lZCBiZWxvd1xuICBcIlxcXFxtYXRocm1cIiwgXCJcXFxcbWF0aGl0XCIsIFwiXFxcXG1hdGhiZlwiLCBcIlxcXFxtYXRobm9ybWFsXCIsIC8vIGZhbWlsaWVzXG4gIFwiXFxcXG1hdGhiYlwiLCBcIlxcXFxtYXRoY2FsXCIsIFwiXFxcXG1hdGhmcmFrXCIsIFwiXFxcXG1hdGhzY3JcIiwgXCJcXFxcbWF0aHNmXCIsIFwiXFxcXG1hdGh0dFwiLCAvLyBhbGlhc2VzLCBleGNlcHQgXFxibSBkZWZpbmVkIGJlbG93XG4gIFwiXFxcXEJiYlwiLCBcIlxcXFxib2xkXCIsIFwiXFxcXGZyYWtcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1swXSk7XG4gICAgdmFyIGZ1bmMgPSBmdW5jTmFtZTtcblxuICAgIGlmIChmdW5jIGluIGZvbnRBbGlhc2VzKSB7XG4gICAgICBmdW5jID0gZm9udEFsaWFzZXNbZnVuY107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZm9udFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBmdW5jLnNsaWNlKDEpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1jbGFzc1wiLFxuICBuYW1lczogW1wiXFxcXGJvbGRzeW1ib2xcIiwgXCJcXFxcYm1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJCb3ggPSB1dGlscy5pc0NoYXJhY3RlckJveChib2R5KTsgLy8gYW1zYnN5LnN0eSdzIFxcYm9sZHN5bWJvbCB1c2VzIFxcYmlucmVsIHNwYWNpbmcgdG8gaW5oZXJpdCB0aGVcbiAgICAvLyBhcmd1bWVudCdzIGJpbnxyZWx8b3JkIHN0YXR1c1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibWNsYXNzXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG1jbGFzczogYmlucmVsQ2xhc3MoYm9keSksXG4gICAgICBib2R5OiBbe1xuICAgICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICAgIGZvbnQ6IFwiYm9sZHN5bWJvbFwiLFxuICAgICAgICBib2R5XG4gICAgICB9XSxcbiAgICAgIGlzQ2hhcmFjdGVyQm94OiBpc0NoYXJhY3RlckJveFxuICAgIH07XG4gIH1cbn0pOyAvLyBPbGQgZm9udCBjaGFuZ2luZyBmdW5jdGlvbnNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImZvbnRcIixcbiAgbmFtZXM6IFtcIlxcXFxybVwiLCBcIlxcXFxzZlwiLCBcIlxcXFx0dFwiLCBcIlxcXFxiZlwiLCBcIlxcXFxpdFwiLCBcIlxcXFxjYWxcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMywgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIGJyZWFrT25Ub2tlblRleHRcbiAgICB9ID0gX3JlZjM7XG4gICAgdmFyIHtcbiAgICAgIG1vZGVcbiAgICB9ID0gcGFyc2VyO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTtcbiAgICB2YXIgc3R5bGUgPSBcIm1hdGhcIiArIGZ1bmNOYW1lLnNsaWNlKDEpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZvbnRcIixcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBmb250OiBzdHlsZSxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgICAgYm9keVxuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ1LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDRcbn0pO1xuXG52YXIgYWRqdXN0U3R5bGUgPSAoc2l6ZSwgb3JpZ2luYWxTdHlsZSkgPT4ge1xuICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgdGhpcyBmcmFjdGlvbiBzaG91bGQgYmUgaW4gYmFzZWQgb24gdGhlXG4gIC8vIGZ1bmN0aW9uIHVzZWRcbiAgdmFyIHN0eWxlID0gb3JpZ2luYWxTdHlsZTtcblxuICBpZiAoc2l6ZSA9PT0gXCJkaXNwbGF5XCIpIHtcbiAgICAvLyBHZXQgZGlzcGxheSBzdHlsZSBhcyBhIGRlZmF1bHQuXG4gICAgLy8gSWYgaW5jb21pbmcgc3R5bGUgaXMgc3ViL3N1cCwgdXNlIHN0eWxlLnRleHQoKSB0byBnZXQgY29ycmVjdCBzaXplLlxuICAgIHN0eWxlID0gc3R5bGUuaWQgPj0gU3R5bGUkMS5TQ1JJUFQuaWQgPyBzdHlsZS50ZXh0KCkgOiBTdHlsZSQxLkRJU1BMQVk7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJ0ZXh0XCIgJiYgc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUpIHtcbiAgICAvLyBXZSdyZSBpbiBhIFxcdGZyYWMgYnV0IGluY29taW5nIHN0eWxlIGlzIGRpc3BsYXlzdHlsZSwgc286XG4gICAgc3R5bGUgPSBTdHlsZSQxLlRFWFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFQ7XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gXCJzY3JpcHRzY3JpcHRcIikge1xuICAgIHN0eWxlID0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQ7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIgaHRtbEJ1aWxkZXIkNCA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBGcmFjdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZXMgNDQ0LTQ0NSwgcnVsZXMgMTUoYS1lKS5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG4gIHZhciBuc3R5bGUgPSBzdHlsZS5mcmFjTnVtKCk7XG4gIHZhciBkc3R5bGUgPSBzdHlsZS5mcmFjRGVuKCk7XG4gIHZhciBuZXdPcHRpb25zO1xuICBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuc3R5bGUpO1xuICB2YXIgbnVtZXJtID0gYnVpbGRHcm91cCQxKGdyb3VwLm51bWVyLCBuZXdPcHRpb25zLCBvcHRpb25zKTtcblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgLy8gXFxjZnJhYyBpbnNlcnRzIGEgXFxzdHJ1dCBpbnRvIHRoZSBudW1lcmF0b3IuXG4gICAgLy8gR2V0IFxcc3RydXQgZGltZW5zaW9ucyBmcm9tIFRlWGJvb2sgcGFnZSAzNTMuXG4gICAgdmFyIGhTdHJ1dCA9IDguNSAvIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5wdFBlckVtO1xuICAgIHZhciBkU3RydXQgPSAzLjUgLyBvcHRpb25zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtcbiAgICBudW1lcm0uaGVpZ2h0ID0gbnVtZXJtLmhlaWdodCA8IGhTdHJ1dCA/IGhTdHJ1dCA6IG51bWVybS5oZWlnaHQ7XG4gICAgbnVtZXJtLmRlcHRoID0gbnVtZXJtLmRlcHRoIDwgZFN0cnV0ID8gZFN0cnV0IDogbnVtZXJtLmRlcHRoO1xuICB9XG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoZHN0eWxlKTtcbiAgdmFyIGRlbm9tbSA9IGJ1aWxkR3JvdXAkMShncm91cC5kZW5vbSwgbmV3T3B0aW9ucywgb3B0aW9ucyk7XG4gIHZhciBydWxlO1xuICB2YXIgcnVsZVdpZHRoO1xuICB2YXIgcnVsZVNwYWNpbmc7XG5cbiAgaWYgKGdyb3VwLmhhc0JhckxpbmUpIHtcbiAgICBpZiAoZ3JvdXAuYmFyU2l6ZSkge1xuICAgICAgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICAgIHJ1bGUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJmcmFjLWxpbmVcIiwgb3B0aW9ucywgcnVsZVdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VMaW5lU3BhbihcImZyYWMtbGluZVwiLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBydWxlV2lkdGggPSBydWxlLmhlaWdodDtcbiAgICBydWxlU3BhY2luZyA9IHJ1bGUuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJ1bGUgPSBudWxsO1xuICAgIHJ1bGVXaWR0aCA9IDA7XG4gICAgcnVsZVNwYWNpbmcgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gIH0gLy8gUnVsZSAxNWJcblxuXG4gIHZhciBudW1TaGlmdDtcbiAgdmFyIGNsZWFyYW5jZTtcbiAgdmFyIGRlbm9tU2hpZnQ7XG5cbiAgaWYgKHN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGdyb3VwLnNpemUgPT09IFwiZGlzcGxheVwiKSB7XG4gICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMTtcblxuICAgIGlmIChydWxlV2lkdGggPiAwKSB7XG4gICAgICBjbGVhcmFuY2UgPSAzICogcnVsZVNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyYW5jZSA9IDcgKiBydWxlU3BhY2luZztcbiAgICB9XG5cbiAgICBkZW5vbVNoaWZ0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlbm9tMTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocnVsZVdpZHRoID4gMCkge1xuICAgICAgbnVtU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkubnVtMjtcbiAgICAgIGNsZWFyYW5jZSA9IHJ1bGVTcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TaGlmdCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5udW0zO1xuICAgICAgY2xlYXJhbmNlID0gMyAqIHJ1bGVTcGFjaW5nO1xuICAgIH1cblxuICAgIGRlbm9tU2hpZnQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVub20yO1xuICB9XG5cbiAgdmFyIGZyYWM7XG5cbiAgaWYgKCFydWxlKSB7XG4gICAgLy8gUnVsZSAxNWNcbiAgICB2YXIgY2FuZGlkYXRlQ2xlYXJhbmNlID0gbnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoZGVub21tLmhlaWdodCAtIGRlbm9tU2hpZnQpO1xuXG4gICAgaWYgKGNhbmRpZGF0ZUNsZWFyYW5jZSA8IGNsZWFyYW5jZSkge1xuICAgICAgbnVtU2hpZnQgKz0gMC41ICogKGNsZWFyYW5jZSAtIGNhbmRpZGF0ZUNsZWFyYW5jZSk7XG4gICAgICBkZW5vbVNoaWZ0ICs9IDAuNSAqIChjbGVhcmFuY2UgLSBjYW5kaWRhdGVDbGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGZyYWMgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBkZW5vbW0sXG4gICAgICAgIHNoaWZ0OiBkZW5vbVNoaWZ0XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBudW1lcm0sXG4gICAgICAgIHNoaWZ0OiAtbnVtU2hpZnRcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUnVsZSAxNWRcbiAgICB2YXIgYXhpc0hlaWdodCA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O1xuXG4gICAgaWYgKG51bVNoaWZ0IC0gbnVtZXJtLmRlcHRoIC0gKGF4aXNIZWlnaHQgKyAwLjUgKiBydWxlV2lkdGgpIDwgY2xlYXJhbmNlKSB7XG4gICAgICBudW1TaGlmdCArPSBjbGVhcmFuY2UgLSAobnVtU2hpZnQgLSBudW1lcm0uZGVwdGggLSAoYXhpc0hlaWdodCArIDAuNSAqIHJ1bGVXaWR0aCkpO1xuICAgIH1cblxuICAgIGlmIChheGlzSGVpZ2h0IC0gMC41ICogcnVsZVdpZHRoIC0gKGRlbm9tbS5oZWlnaHQgLSBkZW5vbVNoaWZ0KSA8IGNsZWFyYW5jZSkge1xuICAgICAgZGVub21TaGlmdCArPSBjbGVhcmFuY2UgLSAoYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCAtIChkZW5vbW0uaGVpZ2h0IC0gZGVub21TaGlmdCkpO1xuICAgIH1cblxuICAgIHZhciBtaWRTaGlmdCA9IC0oYXhpc0hlaWdodCAtIDAuNSAqIHJ1bGVXaWR0aCk7XG4gICAgZnJhYyA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiaW5kaXZpZHVhbFNoaWZ0XCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGRlbm9tbSxcbiAgICAgICAgc2hpZnQ6IGRlbm9tU2hpZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHJ1bGUsXG4gICAgICAgIHNoaWZ0OiBtaWRTaGlmdFxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbnVtZXJtLFxuICAgICAgICBzaGlmdDogLW51bVNoaWZ0XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9IC8vIFNpbmNlIHdlIG1hbnVhbGx5IGNoYW5nZSB0aGUgc3R5bGUgc29tZXRpbWVzICh3aXRoIFxcZGZyYWMgb3IgXFx0ZnJhYyksXG4gIC8vIGFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBzaXplIGNoYW5nZSBoZXJlLlxuXG5cbiAgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpO1xuICBmcmFjLmhlaWdodCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgZnJhYy5kZXB0aCAqPSBuZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gUnVsZSAxNWVcblxuICB2YXIgZGVsaW1TaXplO1xuXG4gIGlmIChzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTE7XG4gIH0gZWxzZSBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5TQ1JJUFRTQ1JJUFQuc2l6ZSkge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yO1xuICB9IGVsc2Uge1xuICAgIGRlbGltU2l6ZSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5kZWxpbTI7XG4gIH1cblxuICB2YXIgbGVmdERlbGltO1xuICB2YXIgcmlnaHREZWxpbTtcblxuICBpZiAoZ3JvdXAubGVmdERlbGltID09IG51bGwpIHtcbiAgICBsZWZ0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtb3BlblwiXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdERlbGltID0gZGVsaW1pdGVyLmN1c3RvbVNpemVkRGVsaW0oZ3JvdXAubGVmdERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtb3BlblwiXSk7XG4gIH1cblxuICBpZiAoZ3JvdXAuY29udGludWVkKSB7XG4gICAgcmlnaHREZWxpbSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdKTsgLy8gemVybyB3aWR0aCBmb3IgXFxjZnJhY1xuICB9IGVsc2UgaWYgKGdyb3VwLnJpZ2h0RGVsaW0gPT0gbnVsbCkge1xuICAgIHJpZ2h0RGVsaW0gPSBtYWtlTnVsbERlbGltaXRlcihvcHRpb25zLCBbXCJtY2xvc2VcIl0pO1xuICB9IGVsc2Uge1xuICAgIHJpZ2h0RGVsaW0gPSBkZWxpbWl0ZXIuY3VzdG9tU2l6ZWREZWxpbShncm91cC5yaWdodERlbGltLCBkZWxpbVNpemUsIHRydWUsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUpLCBncm91cC5tb2RlLCBbXCJtY2xvc2VcIl0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0uY29uY2F0KG5ld09wdGlvbnMuc2l6aW5nQ2xhc3NlcyhvcHRpb25zKSksIFtsZWZ0RGVsaW0sIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1mcmFjXCJdLCBbZnJhY10pLCByaWdodERlbGltXSwgb3B0aW9ucyk7XG59O1xuXG52YXIgbWF0aG1sQnVpbGRlciQzID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtZnJhY1wiLCBbYnVpbGRHcm91cChncm91cC5udW1lciwgb3B0aW9ucyksIGJ1aWxkR3JvdXAoZ3JvdXAuZGVub20sIG9wdGlvbnMpXSk7XG5cbiAgaWYgKCFncm91cC5oYXNCYXJMaW5lKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsaW5ldGhpY2tuZXNzXCIsIFwiMHB4XCIpO1xuICB9IGVsc2UgaWYgKGdyb3VwLmJhclNpemUpIHtcbiAgICB2YXIgcnVsZVdpZHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC5iYXJTaXplLCBvcHRpb25zKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImxpbmV0aGlja25lc3NcIiwgbWFrZUVtKHJ1bGVXaWR0aCkpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gYWRqdXN0U3R5bGUoZ3JvdXAuc2l6ZSwgb3B0aW9ucy5zdHlsZSk7XG5cbiAgaWYgKHN0eWxlLnNpemUgIT09IG9wdGlvbnMuc3R5bGUuc2l6ZSkge1xuICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1zdHlsZVwiLCBbbm9kZV0pO1xuICAgIHZhciBpc0Rpc3BsYXkgPSBzdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiZGlzcGxheXN0eWxlXCIsIGlzRGlzcGxheSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBcIjBcIik7XG4gIH1cblxuICBpZiAoZ3JvdXAubGVmdERlbGltICE9IG51bGwgfHwgZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgdmFyIHdpdGhEZWxpbXMgPSBbXTtcblxuICAgIGlmIChncm91cC5sZWZ0RGVsaW0gIT0gbnVsbCkge1xuICAgICAgdmFyIGxlZnRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLmxlZnREZWxpbS5yZXBsYWNlKFwiXFxcXFwiLCBcIlwiKSldKTtcbiAgICAgIGxlZnRPcC5zZXRBdHRyaWJ1dGUoXCJmZW5jZVwiLCBcInRydWVcIik7XG4gICAgICB3aXRoRGVsaW1zLnB1c2gobGVmdE9wKTtcbiAgICB9XG5cbiAgICB3aXRoRGVsaW1zLnB1c2gobm9kZSk7XG5cbiAgICBpZiAoZ3JvdXAucmlnaHREZWxpbSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmlnaHRPcCA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKGdyb3VwLnJpZ2h0RGVsaW0ucmVwbGFjZShcIlxcXFxcIiwgXCJcIikpXSk7XG4gICAgICByaWdodE9wLnNldEF0dHJpYnV0ZShcImZlbmNlXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHdpdGhEZWxpbXMucHVzaChyaWdodE9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZVJvdyh3aXRoRGVsaW1zKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxkZnJhY1wiLCBcIlxcXFxmcmFjXCIsIFwiXFxcXHRmcmFjXCIsIFwiXFxcXGRiaW5vbVwiLCBcIlxcXFxiaW5vbVwiLCBcIlxcXFx0Ymlub21cIiwgXCJcXFxcXFxcXGF0b3BmcmFjXCIsIC8vIGNhbuKAmXQgYmUgZW50ZXJlZCBkaXJlY3RseVxuICBcIlxcXFxcXFxcYnJhY2VmcmFjXCIsIFwiXFxcXFxcXFxicmFja2ZyYWNcIiAvLyBkaXR0b1xuICBdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluQXJndW1lbnQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgdmFyIGhhc0JhckxpbmU7XG4gICAgdmFyIGxlZnREZWxpbSA9IG51bGw7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSBudWxsO1xuICAgIHZhciBzaXplID0gXCJhdXRvXCI7XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGRmcmFjXCI6XG4gICAgICBjYXNlIFwiXFxcXGZyYWNcIjpcbiAgICAgIGNhc2UgXCJcXFxcdGZyYWNcIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXFxcXFxhdG9wZnJhY1wiOlxuICAgICAgICBoYXNCYXJMaW5lID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGRiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFxiaW5vbVwiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgaGFzQmFyTGluZSA9IGZhbHNlO1xuICAgICAgICBsZWZ0RGVsaW0gPSBcIihcIjtcbiAgICAgICAgcmlnaHREZWxpbSA9IFwiKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2VmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJcXFxce1wiO1xuICAgICAgICByaWdodERlbGltID0gXCJcXFxcfVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI6XG4gICAgICAgIGhhc0JhckxpbmUgPSBmYWxzZTtcbiAgICAgICAgbGVmdERlbGltID0gXCJbXCI7XG4gICAgICAgIHJpZ2h0RGVsaW0gPSBcIl1cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBnZW5mcmFjIGNvbW1hbmRcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmdW5jTmFtZSkge1xuICAgICAgY2FzZSBcIlxcXFxkZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFxkYmlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwiZGlzcGxheVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFx0ZnJhY1wiOlxuICAgICAgY2FzZSBcIlxcXFx0Ymlub21cIjpcbiAgICAgICAgc2l6ZSA9IFwidGV4dFwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplLFxuICAgICAgYmFyU2l6ZTogbnVsbFxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQ0LFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDNcbn0pO1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImdlbmZyYWNcIixcbiAgbmFtZXM6IFtcIlxcXFxjZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBjb250aW51ZWQ6IHRydWUsXG4gICAgICBudW1lcixcbiAgICAgIGRlbm9tLFxuICAgICAgaGFzQmFyTGluZTogdHJ1ZSxcbiAgICAgIGxlZnREZWxpbTogbnVsbCxcbiAgICAgIHJpZ2h0RGVsaW06IG51bGwsXG4gICAgICBzaXplOiBcImRpc3BsYXlcIixcbiAgICAgIGJhclNpemU6IG51bGxcbiAgICB9O1xuICB9XG59KTsgLy8gSW5maXggZ2VuZXJhbGl6ZWQgZnJhY3Rpb25zIC0tIHRoZXNlIGFyZSBub3QgcmVuZGVyZWQgZGlyZWN0bHksIGJ1dCByZXBsYWNlZFxuLy8gaW1tZWRpYXRlbHkgYnkgb25lIG9mIHRoZSB2YXJpYW50cyBhYm92ZS5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImluZml4XCIsXG4gIG5hbWVzOiBbXCJcXFxcb3ZlclwiLCBcIlxcXFxjaG9vc2VcIiwgXCJcXFxcYXRvcFwiLCBcIlxcXFxicmFjZVwiLCBcIlxcXFxicmFja1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmMykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWYzO1xuICAgIHZhciByZXBsYWNlV2l0aDtcblxuICAgIHN3aXRjaCAoZnVuY05hbWUpIHtcbiAgICAgIGNhc2UgXCJcXFxcb3ZlclwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXGZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcY2hvb3NlXCI6XG4gICAgICAgIHJlcGxhY2VXaXRoID0gXCJcXFxcYmlub21cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYXRvcFwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxhdG9wZnJhY1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxicmFjZVwiOlxuICAgICAgICByZXBsYWNlV2l0aCA9IFwiXFxcXFxcXFxicmFjZWZyYWNcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcYnJhY2tcIjpcbiAgICAgICAgcmVwbGFjZVdpdGggPSBcIlxcXFxcXFxcYnJhY2tmcmFjXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoLFxuICAgICAgdG9rZW5cbiAgICB9O1xuICB9XG5cbn0pO1xudmFyIHN0eWxBcnJheSA9IFtcImRpc3BsYXlcIiwgXCJ0ZXh0XCIsIFwic2NyaXB0XCIsIFwic2NyaXB0c2NyaXB0XCJdO1xuXG52YXIgZGVsaW1Gcm9tVmFsdWUgPSBmdW5jdGlvbiBkZWxpbUZyb21WYWx1ZShkZWxpbVN0cmluZykge1xuICB2YXIgZGVsaW0gPSBudWxsO1xuXG4gIGlmIChkZWxpbVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgZGVsaW0gPSBkZWxpbVN0cmluZztcbiAgICBkZWxpbSA9IGRlbGltID09PSBcIi5cIiA/IG51bGwgOiBkZWxpbTtcbiAgfVxuXG4gIHJldHVybiBkZWxpbTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJnZW5mcmFjXCIsXG4gIG5hbWVzOiBbXCJcXFxcZ2VuZnJhY1wiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiA2LFxuICAgIGFsbG93ZWRJbkFyZ3VtZW50OiB0cnVlLFxuICAgIGFyZ1R5cGVzOiBbXCJtYXRoXCIsIFwibWF0aFwiLCBcInNpemVcIiwgXCJ0ZXh0XCIsIFwibWF0aFwiLCBcIm1hdGhcIl1cbiAgfSxcblxuICBoYW5kbGVyKF9yZWY0LCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmNDtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzRdO1xuICAgIHZhciBkZW5vbSA9IGFyZ3NbNV07IC8vIExvb2sgaW50byB0aGUgcGFyc2Ugbm9kZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIGRlbGltaXRlcnMuXG5cbiAgICB2YXIgbGVmdE5vZGUgPSBub3JtYWxpemVBcmd1bWVudChhcmdzWzBdKTtcbiAgICB2YXIgbGVmdERlbGltID0gbGVmdE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgbGVmdE5vZGUuZmFtaWx5ID09PSBcIm9wZW5cIiA/IGRlbGltRnJvbVZhbHVlKGxlZnROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgcmlnaHROb2RlID0gbm9ybWFsaXplQXJndW1lbnQoYXJnc1sxXSk7XG4gICAgdmFyIHJpZ2h0RGVsaW0gPSByaWdodE5vZGUudHlwZSA9PT0gXCJhdG9tXCIgJiYgcmlnaHROb2RlLmZhbWlseSA9PT0gXCJjbG9zZVwiID8gZGVsaW1Gcm9tVmFsdWUocmlnaHROb2RlLnRleHQpIDogbnVsbDtcbiAgICB2YXIgYmFyTm9kZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMl0sIFwic2l6ZVwiKTtcbiAgICB2YXIgaGFzQmFyTGluZTtcbiAgICB2YXIgYmFyU2l6ZSA9IG51bGw7XG5cbiAgICBpZiAoYmFyTm9kZS5pc0JsYW5rKSB7XG4gICAgICAvLyBcXGdlbmZyYWMgYWN0cyBkaWZmZXJlbnRseSB0aGFuIFxcYWJvdmUuXG4gICAgICAvLyBcXGdlbmZyYWMgdHJlYXRzIGFuIGVtcHR5IHNpemUgZ3JvdXAgYXMgYSBzaWduYWwgdG8gdXNlIGFcbiAgICAgIC8vIHN0YW5kYXJkIGJhciBzaXplLiBcXGFib3ZlIHdvdWxkIHNlZSBzaXplID0gMCBhbmQgb21pdCB0aGUgYmFyLlxuICAgICAgaGFzQmFyTGluZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhclNpemUgPSBiYXJOb2RlLnZhbHVlO1xuICAgICAgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICB9IC8vIEZpbmQgb3V0IGlmIHdlIHdhbnQgZGlzcGxheXN0eWxlLCB0ZXh0c3R5bGUsIGV0Yy5cblxuXG4gICAgdmFyIHNpemUgPSBcImF1dG9cIjtcbiAgICB2YXIgc3R5bCA9IGFyZ3NbM107XG5cbiAgICBpZiAoc3R5bC50eXBlID09PSBcIm9yZGdyb3VwXCIpIHtcbiAgICAgIGlmIChzdHlsLmJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdGV4dE9yZCA9IGFzc2VydE5vZGVUeXBlKHN0eWwuYm9keVswXSwgXCJ0ZXh0b3JkXCIpO1xuICAgICAgICBzaXplID0gc3R5bEFycmF5W051bWJlcih0ZXh0T3JkLnRleHQpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bCA9IGFzc2VydE5vZGVUeXBlKHN0eWwsIFwidGV4dG9yZFwiKTtcbiAgICAgIHNpemUgPSBzdHlsQXJyYXlbTnVtYmVyKHN0eWwudGV4dCldO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImdlbmZyYWNcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgbnVtZXIsXG4gICAgICBkZW5vbSxcbiAgICAgIGNvbnRpbnVlZDogZmFsc2UsXG4gICAgICBoYXNCYXJMaW5lLFxuICAgICAgYmFyU2l6ZSxcbiAgICAgIGxlZnREZWxpbSxcbiAgICAgIHJpZ2h0RGVsaW0sXG4gICAgICBzaXplXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTsgLy8gXFxhYm92ZSBpcyBhbiBpbmZpeCBmcmFjdGlvbiB0aGF0IGFsc28gZGVmaW5lcyBhIGZyYWN0aW9uIGJhciBzaXplLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5maXhcIixcbiAgbmFtZXM6IFtcIlxcXFxhYm92ZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJzaXplXCJdLFxuICAgIGluZml4OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNSwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHRva2VuXG4gICAgfSA9IF9yZWY1O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluZml4XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIHJlcGxhY2VXaXRoOiBcIlxcXFxcXFxcYWJvdmVmcmFjXCIsXG4gICAgICBzaXplOiBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInNpemVcIikudmFsdWUsXG4gICAgICB0b2tlblxuICAgIH07XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiZ2VuZnJhY1wiLFxuICBuYW1lczogW1wiXFxcXFxcXFxhYm92ZWZyYWNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMyxcbiAgICBhcmdUeXBlczogW1wibWF0aFwiLCBcInNpemVcIiwgXCJtYXRoXCJdXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmNiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNjtcbiAgICB2YXIgbnVtZXIgPSBhcmdzWzBdO1xuICAgIHZhciBiYXJTaXplID0gYXNzZXJ0KGFzc2VydE5vZGVUeXBlKGFyZ3NbMV0sIFwiaW5maXhcIikuc2l6ZSk7XG4gICAgdmFyIGRlbm9tID0gYXJnc1syXTtcbiAgICB2YXIgaGFzQmFyTGluZSA9IGJhclNpemUubnVtYmVyID4gMDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJnZW5mcmFjXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIG51bWVyLFxuICAgICAgZGVub20sXG4gICAgICBjb250aW51ZWQ6IGZhbHNlLFxuICAgICAgaGFzQmFyTGluZSxcbiAgICAgIGJhclNpemUsXG4gICAgICBsZWZ0RGVsaW06IG51bGwsXG4gICAgICByaWdodERlbGltOiBudWxsLFxuICAgICAgc2l6ZTogXCJhdXRvXCJcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogaHRtbEJ1aWxkZXIkNCxcbiAgbWF0aG1sQnVpbGRlcjogbWF0aG1sQnVpbGRlciQzXG59KTtcblxuLy8gTk9URTogVW5saWtlIG1vc3QgYGh0bWxCdWlsZGVyYHMsIHRoaXMgb25lIGhhbmRsZXMgbm90IG9ubHkgXCJob3JpekJyYWNlXCIsIGJ1dFxuLy8gYWxzbyBcInN1cHN1YlwiIHNpbmNlIGFuIG92ZXIvdW5kZXJicmFjZSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cbnZhciBodG1sQnVpbGRlciQzID0gKGdycCwgb3B0aW9ucykgPT4ge1xuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlOyAvLyBQdWxsIG91dCB0aGUgYFBhcnNlTm9kZTxcImhvcml6QnJhY2VcIj5gIGlmIGBncnBgIGlzIGEgXCJzdXBzdWJcIiBub2RlLlxuXG4gIHZhciBzdXBTdWJHcm91cDtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIFJlZjogTGFUZVggc291cmNlMmU6IH19fX1cXGxpbWl0c31cbiAgICAvLyBpLmUuIExhVGVYIHRyZWF0cyB0aGUgYnJhY2Ugc2ltaWxhciB0byBhbiBvcCBhbmQgcGFzc2VzIGl0XG4gICAgLy8gd2l0aCBcXGxpbWl0cywgc28gd2UgbmVlZCB0byBhc3NpZ24gc3Vwc3ViIHN0eWxlLlxuICAgIHN1cFN1Ykdyb3VwID0gZ3JwLnN1cCA/IGJ1aWxkR3JvdXAkMShncnAuc3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1cCgpKSwgb3B0aW9ucykgOiBidWlsZEdyb3VwJDEoZ3JwLnN1Yiwgb3B0aW9ucy5oYXZpbmdTdHlsZShzdHlsZS5zdWIoKSksIG9wdGlvbnMpO1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLmJhc2UsIFwiaG9yaXpCcmFjZVwiKTtcbiAgfSBlbHNlIHtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycCwgXCJob3JpekJyYWNlXCIpO1xuICB9IC8vIEJ1aWxkIHRoZSBiYXNlIGdyb3VwXG5cblxuICB2YXIgYm9keSA9IGJ1aWxkR3JvdXAkMShncm91cC5iYXNlLCBvcHRpb25zLmhhdmluZ0Jhc2VTdHlsZShTdHlsZSQxLkRJU1BMQVkpKTsgLy8gQ3JlYXRlIHRoZSBzdHJldGNoeSBlbGVtZW50XG5cbiAgdmFyIGJyYWNlQm9keSA9IHN0cmV0Y2h5LnN2Z1NwYW4oZ3JvdXAsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zICAgICAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgLy8gVGhpcyBmaXJzdCB2bGlzdCBjb250YWlucyB0aGUgY29udGVudCBhbmQgdGhlIGJyYWNlOiAgIGVxdWF0aW9uXG5cbiAgdmFyIHZsaXN0O1xuXG4gIGlmIChncm91cC5pc092ZXIpIHtcbiAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiAwLjFcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gJEZsb3dGaXhNZTogUmVwbGFjZSB0aGlzIHdpdGggcGFzc2luZyBcInN2Zy1hbGlnblwiIGludG8gbWFrZVZMaXN0LlxuXG4gICAgdmxpc3QuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKFwic3ZnLWFsaWduXCIpO1xuICB9IGVsc2Uge1xuICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgIHBvc2l0aW9uRGF0YTogYm9keS5kZXB0aCArIDAuMSArIGJyYWNlQm9keS5oZWlnaHQsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJyYWNlQm9keVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMC4xXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyAkRmxvd0ZpeE1lOiBSZXBsYWNlIHRoaXMgd2l0aCBwYXNzaW5nIFwic3ZnLWFsaWduXCIgaW50byBtYWtlVkxpc3QuXG5cbiAgICB2bGlzdC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goXCJzdmctYWxpZ25cIik7XG4gIH1cblxuICBpZiAoc3VwU3ViR3JvdXApIHtcbiAgICAvLyBUbyB3cml0ZSB0aGUgc3Vwc3ViLCB3cmFwIHRoZSBmaXJzdCB2bGlzdCBpbiBhbm90aGVyIHZsaXN0OlxuICAgIC8vIFRoZXkgY2FuJ3QgYWxsIGdvIGluIHRoZSBzYW1lIHZsaXN0LCBiZWNhdXNlIHRoZSBub3RlIG1pZ2h0IGJlXG4gICAgLy8gd2lkZXIgdGhhbiB0aGUgZXF1YXRpb24uIFdlIHdhbnQgdGhlIGVxdWF0aW9uIHRvIGNvbnRyb2wgdGhlXG4gICAgLy8gYnJhY2Ugd2lkdGguXG4gICAgLy8gICAgICBub3RlICAgICAgICAgIGxvbmcgbm90ZSAgICAgICAgICAgbG9uZyBub3RlXG4gICAgLy8gICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilJMgICBvciAgICDilI/ilIHilIHilIHilJMgICAgIG5vdCAgICDilI/ilIHilIHilIHilIHilIHilIHilIHilIHilIHilJNcbiAgICAvLyAgICBlcXVhdGlvbiAgICAgICAgICAgZXFuICAgICAgICAgICAgICAgICBlcW5cbiAgICB2YXIgdlNwYW4gPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIGdyb3VwLmlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcblxuICAgIGlmIChncm91cC5pc092ZXIpIHtcbiAgICAgIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogdlNwYW5cbiAgICAgICAgfSwge1xuICAgICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICAgIHNpemU6IDAuMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgICAgZWxlbTogc3VwU3ViR3JvdXBcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJib3R0b21cIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiB2U3Bhbi5kZXB0aCArIDAuMiArIHN1cFN1Ykdyb3VwLmhlaWdodCArIHN1cFN1Ykdyb3VwLmRlcHRoLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBzdXBTdWJHcm91cFxuICAgICAgICB9LCB7XG4gICAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgICAgc2l6ZTogMC4yXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiB2U3BhblxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIl0sIFt2bGlzdF0sIG9wdGlvbnMpO1xufTtcblxudmFyIG1hdGhtbEJ1aWxkZXIkMiA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICB2YXIgYWNjZW50Tm9kZSA9IHN0cmV0Y2h5Lm1hdGhNTG5vZGUoZ3JvdXAubGFiZWwpO1xuICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoZ3JvdXAuaXNPdmVyID8gXCJtb3ZlclwiIDogXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYmFzZSwgb3B0aW9ucyksIGFjY2VudE5vZGVdKTtcbn07IC8vIEhvcml6b250YWwgc3RyZXRjaHkgYnJhY2VzXG5cblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImhvcml6QnJhY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVyYnJhY2VcIiwgXCJcXFxcdW5kZXJicmFjZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaG9yaXpCcmFjZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICBpc092ZXI6IC9eXFxcXG92ZXIvLnRlc3QoZnVuY05hbWUpLFxuICAgICAgYmFzZTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDMsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMlxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcaHJlZlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIGFyZ1R5cGVzOiBbXCJ1cmxcIiwgXCJvcmlnaW5hbFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1sxXTtcbiAgICB2YXIgaHJlZiA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxocmVmXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFxocmVmXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImhyZWZcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgaHJlZixcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUFuY2hvcihncm91cC5ocmVmLCBbXSwgZWxlbWVudHMsIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbWF0aCA9IGJ1aWxkRXhwcmVzc2lvblJvdyhncm91cC5ib2R5LCBvcHRpb25zKTtcblxuICAgIGlmICghKG1hdGggaW5zdGFuY2VvZiBNYXRoTm9kZSkpIHtcbiAgICAgIG1hdGggPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFttYXRoXSk7XG4gICAgfVxuXG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGdyb3VwLmhyZWYpO1xuICAgIHJldHVybiBtYXRoO1xuICB9XG59KTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJocmVmXCIsXG4gIG5hbWVzOiBbXCJcXFxcdXJsXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYXJnVHlwZXM6IFtcInVybFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmMiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjI7XG4gICAgdmFyIGhyZWYgPSBhc3NlcnROb2RlVHlwZShhcmdzWzBdLCBcInVybFwiKS51cmw7XG5cbiAgICBpZiAoIXBhcnNlci5zZXR0aW5ncy5pc1RydXN0ZWQoe1xuICAgICAgY29tbWFuZDogXCJcXFxcdXJsXCIsXG4gICAgICB1cmw6IGhyZWZcbiAgICB9KSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5mb3JtYXRVbnN1cHBvcnRlZENtZChcIlxcXFx1cmxcIik7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhyZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gaHJlZltpXTtcblxuICAgICAgaWYgKGMgPT09IFwiflwiKSB7XG4gICAgICAgIGMgPSBcIlxcXFx0ZXh0YXNjaWl0aWxkZVwiO1xuICAgICAgfVxuXG4gICAgICBjaGFycy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiBjXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgYm9keSA9IHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBmb250OiBcIlxcXFx0ZXh0dHRcIixcbiAgICAgIGJvZHk6IGNoYXJzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJocmVmXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGhyZWYsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveCwgYXMgaW5cbi8vIFxcdmNlbnRlcntcXGhib3h7JFxcZnJhY3thK2J9e1xcZGZyYWN7Y317ZH19JH19XG4vLyBUaGlzIGZ1bmN0aW9uIGJ5IGl0c2VsZiBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmV2ZW50IGEgc29mdCBsaW5lIGJyZWFrLlxuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaGJveFwiLFxuICBuYW1lczogW1wiXFxcXGhib3hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJoYm94XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMsIGZhbHNlKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXJvd1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxDbGFzc1wiLCBcIlxcXFxodG1sSWRcIiwgXCJcXFxcaHRtbFN0eWxlXCIsIFwiXFxcXGh0bWxEYXRhXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInJhd1wiLCBcIm9yaWdpbmFsXCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWUsXG4gICAgICB0b2tlblxuICAgIH0gPSBfcmVmO1xuICAgIHZhciB2YWx1ZSA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwicmF3XCIpLnN0cmluZztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG5cbiAgICBpZiAocGFyc2VyLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImh0bWxFeHRlbnNpb25cIiwgXCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB2YXIgdHJ1c3RDb250ZXh0O1xuICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG5cbiAgICBzd2l0Y2ggKGZ1bmNOYW1lKSB7XG4gICAgICBjYXNlIFwiXFxcXGh0bWxDbGFzc1wiOlxuICAgICAgICBhdHRyaWJ1dGVzLmNsYXNzID0gdmFsdWU7XG4gICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICBjb21tYW5kOiBcIlxcXFxodG1sQ2xhc3NcIixcbiAgICAgICAgICBjbGFzczogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJcXFxcaHRtbElkXCI6XG4gICAgICAgIGF0dHJpYnV0ZXMuaWQgPSB2YWx1ZTtcbiAgICAgICAgdHJ1c3RDb250ZXh0ID0ge1xuICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxJZFwiLFxuICAgICAgICAgIGlkOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIlxcXFxodG1sU3R5bGVcIjpcbiAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IHZhbHVlO1xuICAgICAgICB0cnVzdENvbnRleHQgPSB7XG4gICAgICAgICAgY29tbWFuZDogXCJcXFxcaHRtbFN0eWxlXCIsXG4gICAgICAgICAgc3R5bGU6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiXFxcXGh0bWxEYXRhXCI6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleVZhbCA9IGRhdGFbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgICAgICBpZiAoa2V5VmFsLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXFxcaHRtbERhdGFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJkYXRhLVwiICsga2V5VmFsWzBdLnRyaW0oKV0gPSBrZXlWYWxbMV0udHJpbSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRydXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiXFxcXGh0bWxEYXRhXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh0cnVzdENvbnRleHQpKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGZ1bmNOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBib2R5OiBvcmRhcmd1bWVudChib2R5KVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5ib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgdmFyIGNsYXNzZXMgPSBbXCJlbmNsb3NpbmdcIl07XG5cbiAgICBpZiAoZ3JvdXAuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgY2xhc3Nlcy5wdXNoKC4uLmdyb3VwLmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLykpO1xuICAgIH1cblxuICAgIHZhciBzcGFuID0gYnVpbGRDb21tb24ubWFrZVNwYW4oY2xhc3NlcywgZWxlbWVudHMsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgYXR0ciBpbiBncm91cC5hdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoYXR0ciAhPT0gXCJjbGFzc1wiICYmIGdyb3VwLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoYXR0ciwgZ3JvdXAuYXR0cmlidXRlc1thdHRyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHRtbG1hdGhtbFwiLFxuICBuYW1lczogW1wiXFxcXGh0bWxAbWF0aG1sXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJodG1sbWF0aG1sXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGh0bWw6IG9yZGFyZ3VtZW50KGFyZ3NbMF0pLFxuICAgICAgbWF0aG1sOiBvcmRhcmd1bWVudChhcmdzWzFdKVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShncm91cC5odG1sLCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBidWlsZEV4cHJlc3Npb25Sb3coZ3JvdXAubWF0aG1sLCBvcHRpb25zKTtcbiAgfVxufSk7XG5cbnZhciBzaXplRGF0YSA9IGZ1bmN0aW9uIHNpemVEYXRhKHN0cikge1xuICBpZiAoL15bLStdPyAqKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspJC8udGVzdChzdHIpKSB7XG4gICAgLy8gc3RyIGlzIGEgbnVtYmVyIHdpdGggbm8gdW5pdCBzcGVjaWZpZWQuXG4gICAgLy8gZGVmYXVsdCB1bml0IGlzIGJwLCBwZXIgZ3JhcGhpeCBwYWNrYWdlLlxuICAgIHJldHVybiB7XG4gICAgICBudW1iZXI6ICtzdHIsXG4gICAgICB1bml0OiBcImJwXCJcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC8oWy0rXT8pICooXFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhzdHIpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIHNpemU6ICdcIiArIHN0ciArIFwiJyBpbiBcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInIGluIFxcXFxpbmNsdWRlZ3JhcGhpY3MuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaW5jbHVkZWdyYXBoaWNzXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgbnVtT3B0aW9uYWxBcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJyYXdcIiwgXCJ1cmxcIl0sXG4gICAgYWxsb3dlZEluVGV4dDogZmFsc2VcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYsIGFyZ3MsIG9wdEFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIHdpZHRoID0ge1xuICAgICAgbnVtYmVyOiAwLFxuICAgICAgdW5pdDogXCJlbVwiXG4gICAgfTtcbiAgICB2YXIgaGVpZ2h0ID0ge1xuICAgICAgbnVtYmVyOiAwLjksXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9OyAvLyBzb3J0YSBjaGFyYWN0ZXIgc2l6ZWQuXG5cbiAgICB2YXIgdG90YWxoZWlnaHQgPSB7XG4gICAgICBudW1iZXI6IDAsXG4gICAgICB1bml0OiBcImVtXCJcbiAgICB9O1xuICAgIHZhciBhbHQgPSBcIlwiO1xuXG4gICAgaWYgKG9wdEFyZ3NbMF0pIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVTdHIgPSBhc3NlcnROb2RlVHlwZShvcHRBcmdzWzBdLCBcInJhd1wiKS5zdHJpbmc7IC8vIFBhcnNlci5qcyBkb2VzIG5vdCBwYXJzZSBrZXkvdmFsdWUgcGFpcnMuIFdlIGdldCBhIHN0cmluZy5cblxuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTdHIuc3BsaXQoXCIsXCIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleVZhbCA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoXCI9XCIpO1xuXG4gICAgICAgIGlmIChrZXlWYWwubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGtleVZhbFsxXS50cmltKCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleVZhbFswXS50cmltKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhbHRcIjpcbiAgICAgICAgICAgICAgYWx0ID0gc3RyO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgICAgICAgIHdpZHRoID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZURhdGEoc3RyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ0b3RhbGhlaWdodFwiOlxuICAgICAgICAgICAgICB0b3RhbGhlaWdodCA9IHNpemVEYXRhKHN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQga2V5OiAnXCIgKyBrZXlWYWxbMF0gKyBcIicgaW4gXFxcXGluY2x1ZGVncmFwaGljcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwidXJsXCIpLnVybDtcblxuICAgIGlmIChhbHQgPT09IFwiXCIpIHtcbiAgICAgIC8vIE5vIGFsdCBnaXZlbi4gVXNlIHRoZSBmaWxlIG5hbWUuIFN0cmlwIGF3YXkgdGhlIHBhdGguXG4gICAgICBhbHQgPSBzcmM7XG4gICAgICBhbHQgPSBhbHQucmVwbGFjZSgvXi4qW1xcXFwvXS8sICcnKTtcbiAgICAgIGFsdCA9IGFsdC5zdWJzdHJpbmcoMCwgYWx0Lmxhc3RJbmRleE9mKCcuJykpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VyLnNldHRpbmdzLmlzVHJ1c3RlZCh7XG4gICAgICBjb21tYW5kOiBcIlxcXFxpbmNsdWRlZ3JhcGhpY3NcIixcbiAgICAgIHVybDogc3JjXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoXCJcXFxcaW5jbHVkZWdyYXBoaWNzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImluY2x1ZGVncmFwaGljc1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbHQ6IGFsdCxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgdG90YWxoZWlnaHQ6IHRvdGFsaGVpZ2h0LFxuICAgICAgc3JjOiBzcmNcbiAgICB9O1xuICB9LFxuICBodG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGhlaWdodCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAuaGVpZ2h0LCBvcHRpb25zKTtcbiAgICB2YXIgZGVwdGggPSAwO1xuXG4gICAgaWYgKGdyb3VwLnRvdGFsaGVpZ2h0Lm51bWJlciA+IDApIHtcbiAgICAgIGRlcHRoID0gY2FsY3VsYXRlU2l6ZShncm91cC50b3RhbGhlaWdodCwgb3B0aW9ucykgLSBoZWlnaHQ7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogbWFrZUVtKGhlaWdodCArIGRlcHRoKVxuICAgIH07XG5cbiAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IG1ha2VFbSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgc3R5bGUudmVydGljYWxBbGlnbiA9IG1ha2VFbSgtZGVwdGgpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gbmV3IEltZyhncm91cC5zcmMsIGdyb3VwLmFsdCwgc3R5bGUpO1xuICAgIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIG5vZGUuZGVwdGggPSBkZXB0aDtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1nbHlwaFwiLCBbXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgZ3JvdXAuYWx0KTtcbiAgICB2YXIgaGVpZ2h0ID0gY2FsY3VsYXRlU2l6ZShncm91cC5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHZhciBkZXB0aCA9IDA7XG5cbiAgICBpZiAoZ3JvdXAudG90YWxoZWlnaHQubnVtYmVyID4gMCkge1xuICAgICAgZGVwdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLnRvdGFsaGVpZ2h0LCBvcHRpb25zKSAtIGhlaWdodDtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwidmFsaWduXCIsIG1ha2VFbSgtZGVwdGgpKTtcbiAgICB9XG5cbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0ICsgZGVwdGgpKTtcblxuICAgIGlmIChncm91cC53aWR0aC5udW1iZXIgPiAwKSB7XG4gICAgICB2YXIgd2lkdGggPSBjYWxjdWxhdGVTaXplKGdyb3VwLndpZHRoLCBvcHRpb25zKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgbWFrZUVtKHdpZHRoKSk7XG4gICAgfVxuXG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgZ3JvdXAuc3JjKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIEhvcml6b250YWwgc3BhY2luZyBjb21tYW5kc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwia2VyblwiLFxuICBuYW1lczogW1wiXFxcXGtlcm5cIiwgXCJcXFxcbWtlcm5cIiwgXCJcXFxcaHNraXBcIiwgXCJcXFxcbXNraXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiXSxcbiAgICBwcmltaXRpdmU6IHRydWUsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaXplID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuXG4gICAgaWYgKHBhcnNlci5zZXR0aW5ncy5zdHJpY3QpIHtcbiAgICAgIHZhciBtYXRoRnVuY3Rpb24gPSBmdW5jTmFtZVsxXSA9PT0gJ20nOyAvLyBcXG1rZXJuLCBcXG1za2lwXG5cbiAgICAgIHZhciBtdVVuaXQgPSBzaXplLnZhbHVlLnVuaXQgPT09ICdtdSc7XG5cbiAgICAgIGlmIChtYXRoRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKCFtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgXCIgKyAoXCJub3QgXCIgKyBzaXplLnZhbHVlLnVuaXQgKyBcIiB1bml0c1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyLm1vZGUgIT09IFwibWF0aFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcIm1hdGhWc1RleHRVbml0c1wiLCBcIkxhVGVYJ3MgXCIgKyBmdW5jTmFtZSArIFwiIHdvcmtzIG9ubHkgaW4gbWF0aCBtb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAhbWF0aEZ1bmN0aW9uXG4gICAgICAgIGlmIChtdVVuaXQpIHtcbiAgICAgICAgICBwYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KFwibWF0aFZzVGV4dFVuaXRzXCIsIFwiTGFUZVgncyBcIiArIGZ1bmNOYW1lICsgXCIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBkaW1lbnNpb246IHNpemUudmFsdWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VHbHVlKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBkaW1lbnNpb24gPSBjYWxjdWxhdGVTaXplKGdyb3VwLmRpbWVuc2lvbiwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBtYXRoTUxUcmVlLlNwYWNlTm9kZShkaW1lbnNpb24pO1xuICB9XG5cbn0pO1xuXG4vLyBIb3Jpem9udGFsIG92ZXJsYXAgZnVuY3Rpb25zXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwibGFwXCIsXG4gIG5hbWVzOiBbXCJcXFxcbWF0aGxsYXBcIiwgXCJcXFxcbWF0aHJsYXBcIiwgXCJcXFxcbWF0aGNsYXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImxhcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBhbGlnbm1lbnQ6IGZ1bmNOYW1lLnNsaWNlKDUpLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICAvLyBtYXRobGxhcCwgbWF0aHJsYXAsIG1hdGhjbGFwXG4gICAgdmFyIGlubmVyO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCA9PT0gXCJjbGFwXCIpIHtcbiAgICAgIC8vIHJlZjogaHR0cHM6Ly93d3cubWF0aC5sc3UuZWR1L35hcGVybGlzL3B1YmxpY2F0aW9ucy9tYXRoY2xhcC9cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTsgLy8gd3JhcCwgc2luY2UgQ1NTIHdpbGwgY2VudGVyIGEgLmNsYXAgPiAuaW5uZXIgPiBzcGFuXG5cbiAgICAgIGlubmVyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wiaW5uZXJcIl0sIFtpbm5lcl0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImlubmVyXCJdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMpXSk7XG4gICAgfVxuXG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW2dyb3VwLmFsaWdubWVudF0sIFtpbm5lciwgZml4XSwgb3B0aW9ucyk7IC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgY29ycmVjdGx5IHNldCBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGVcbiAgICAvLyB0d28gaXRlbXMgaW52b2x2ZWQgaW4gdGhlIGxhcC5cbiAgICAvLyBOZXh0LCB1c2UgYSBzdHJ1dCB0byBzZXQgdGhlIGhlaWdodCBvZiB0aGUgSFRNTCBib3VuZGluZyBib3guXG4gICAgLy8gT3RoZXJ3aXNlLCBhIHRhbGwgYXJndW1lbnQgbWF5IGJlIG1pc3BsYWNlZC5cbiAgICAvLyBUaGlzIGNvZGUgcmVzb2x2ZWQgaXNzdWUgIzExNTNcblxuICAgIHZhciBzdHJ1dCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcInN0cnV0XCJdKTtcbiAgICBzdHJ1dC5zdHlsZS5oZWlnaHQgPSBtYWtlRW0obm9kZS5oZWlnaHQgKyBub2RlLmRlcHRoKTtcblxuICAgIGlmIChub2RlLmRlcHRoKSB7XG4gICAgICBzdHJ1dC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gbWFrZUVtKC1ub2RlLmRlcHRoKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuLnVuc2hpZnQoc3RydXQpOyAvLyBOZXh0LCBwcmV2ZW50IHZlcnRpY2FsIG1pc3BsYWNlbWVudCB3aGVuIG5leHQgdG8gc29tZXRoaW5nIHRhbGwuXG4gICAgLy8gVGhpcyBjb2RlIHJlc29sdmVzIGlzc3VlICMxMjM0XG5cbiAgICBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1widGhpbmJveFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiLCBcInZib3hcIl0sIFtub2RlXSwgb3B0aW9ucyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIC8vIG1hdGhsbGFwLCBtYXRocmxhcCwgbWF0aGNsYXBcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLmFsaWdubWVudCAhPT0gXCJybGFwXCIpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBncm91cC5hbGlnbm1lbnQgPT09IFwibGxhcFwiID8gXCItMVwiIDogXCItMC41XCI7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxzcGFjZVwiLCBvZmZzZXQgKyBcIndpZHRoXCIpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIwcHhcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic3R5bGluZ1wiLFxuICBuYW1lczogW1wiXFxcXChcIiwgXCIkXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5NYXRoOiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBvdXRlck1vZGUgPSBwYXJzZXIubW9kZTtcbiAgICBwYXJzZXIuc3dpdGNoTW9kZShcIm1hdGhcIik7XG4gICAgdmFyIGNsb3NlID0gZnVuY05hbWUgPT09IFwiXFxcXChcIiA/IFwiXFxcXClcIiA6IFwiJFwiO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgY2xvc2UpO1xuICAgIHBhcnNlci5leHBlY3QoY2xvc2UpO1xuICAgIHBhcnNlci5zd2l0Y2hNb2RlKG91dGVyTW9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3R5bGluZ1wiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzdHlsZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfVxuXG59KTsgLy8gQ2hlY2sgZm9yIGV4dHJhIGNsb3NpbmcgbWF0aCBkZWxpbWl0ZXJzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ0ZXh0XCIsXG4gIC8vIERvZXNuJ3QgbWF0dGVyIHdoYXQgdGhpcyBpcy5cbiAgbmFtZXM6IFtcIlxcXFwpXCIsIFwiXFxcXF1cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlLFxuICAgIGFsbG93ZWRJbk1hdGg6IGZhbHNlXG4gIH0sXG5cbiAgaGFuZGxlcihjb250ZXh0LCBhcmdzKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNaXNtYXRjaGVkIFwiICsgY29udGV4dC5mdW5jTmFtZSk7XG4gIH1cblxufSk7XG5cbnZhciBjaG9vc2VNYXRoU3R5bGUgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgc3dpdGNoIChvcHRpb25zLnN0eWxlLnNpemUpIHtcbiAgICBjYXNlIFN0eWxlJDEuRElTUExBWS5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLmRpc3BsYXk7XG5cbiAgICBjYXNlIFN0eWxlJDEuVEVYVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnRleHQ7XG5cbiAgICBjYXNlIFN0eWxlJDEuU0NSSVBULnNpemU6XG4gICAgICByZXR1cm4gZ3JvdXAuc2NyaXB0O1xuXG4gICAgY2FzZSBTdHlsZSQxLlNDUklQVFNDUklQVC5zaXplOlxuICAgICAgcmV0dXJuIGdyb3VwLnNjcmlwdHNjcmlwdDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZ3JvdXAudGV4dDtcbiAgfVxufTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgbmFtZXM6IFtcIlxcXFxtYXRoY2hvaWNlXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDQsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm1hdGhjaG9pY2VcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZGlzcGxheTogb3JkYXJndW1lbnQoYXJnc1swXSksXG4gICAgICB0ZXh0OiBvcmRhcmd1bWVudChhcmdzWzFdKSxcbiAgICAgIHNjcmlwdDogb3JkYXJndW1lbnQoYXJnc1syXSksXG4gICAgICBzY3JpcHRzY3JpcHQ6IG9yZGFyZ3VtZW50KGFyZ3NbM10pXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICB2YXIgZWxlbWVudHMgPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLCBmYWxzZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VGcmFnbWVudChlbGVtZW50cyk7XG4gIH0sXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBib2R5ID0gY2hvb3NlTWF0aFN0eWxlKGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGJvZHksIG9wdGlvbnMpO1xuICB9XG59KTtcblxudmFyIGFzc2VtYmxlU3VwU3ViID0gKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgc3R5bGUsIHNsYW50LCBiYXNlU2hpZnQpID0+IHtcbiAgYmFzZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYmFzZV0pO1xuICB2YXIgc3ViSXNTaW5nbGVDaGFyYWN0ZXIgPSBzdWJHcm91cCAmJiB1dGlscy5pc0NoYXJhY3RlckJveChzdWJHcm91cCk7XG4gIHZhciBzdWI7XG4gIHZhciBzdXA7IC8vIFdlIG1hbnVhbGx5IGhhdmUgdG8gaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMuIFRoaXMsXG4gIC8vIGFzaWRlIGZyb20gdGhlIGtlcm4gY2FsY3VsYXRpb25zLCBpcyBjb3BpZWQgZnJvbSBzdXBzdWIuXG5cbiAgaWYgKHN1cEdyb3VwKSB7XG4gICAgdmFyIGVsZW0gPSBidWlsZEdyb3VwJDEoc3VwR3JvdXAsIG9wdGlvbnMuaGF2aW5nU3R5bGUoc3R5bGUuc3VwKCkpLCBvcHRpb25zKTtcbiAgICBzdXAgPSB7XG4gICAgICBlbGVtLFxuICAgICAga2VybjogTWF0aC5tYXgob3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsIG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczIC0gZWxlbS5kZXB0aClcbiAgICB9O1xuICB9XG5cbiAgaWYgKHN1Ykdyb3VwKSB7XG4gICAgdmFyIF9lbGVtID0gYnVpbGRHcm91cCQxKHN1Ykdyb3VwLCBvcHRpb25zLmhhdmluZ1N0eWxlKHN0eWxlLnN1YigpKSwgb3B0aW9ucyk7XG5cbiAgICBzdWIgPSB7XG4gICAgICBlbGVtOiBfZWxlbSxcbiAgICAgIGtlcm46IE1hdGgubWF4KG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLCBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNCAtIF9lbGVtLmhlaWdodClcbiAgICB9O1xuICB9IC8vIEJ1aWxkIHRoZSBmaW5hbCBncm91cCBhcyBhIHZsaXN0IG9mIHRoZSBwb3NzaWJsZSBzdWJzY3JpcHQsIGJhc2UsXG4gIC8vIGFuZCBwb3NzaWJsZSBzdXBlcnNjcmlwdC5cblxuXG4gIHZhciBmaW5hbEdyb3VwO1xuXG4gIGlmIChzdXAgJiYgc3ViKSB7XG4gICAgdmFyIGJvdHRvbSA9IG9wdGlvbnMuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1ICsgc3ViLmVsZW0uaGVpZ2h0ICsgc3ViLmVsZW0uZGVwdGggKyBzdWIua2VybiArIGJhc2UuZGVwdGggKyBiYXNlU2hpZnQ7XG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGJvdHRvbSxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3ViKSB7XG4gICAgdmFyIHRvcCA9IGJhc2UuaGVpZ2h0IC0gYmFzZVNoaWZ0OyAvLyBTaGlmdCB0aGUgbGltaXRzIGJ5IHRoZSBzbGFudCBvZiB0aGUgc3ltYm9sLiBOb3RlXG4gICAgLy8gdGhhdCB3ZSBhcmUgc3VwcG9zZWQgdG8gc2hpZnQgdGhlIGxpbWl0cyBieSAxLzIgb2YgdGhlIHNsYW50LFxuICAgIC8vIGJ1dCBzaW5jZSB3ZSBhcmUgY2VudGVyaW5nIHRoZSBsaW1pdHMgYWRkaW5nIGEgZnVsbCBzbGFudCBvZlxuICAgIC8vIG1hcmdpbiB3aWxsIHNoaWZ0IGJ5IDEvMiB0aGF0LlxuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IHRvcCxcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Yi5lbGVtLFxuICAgICAgICBtYXJnaW5MZWZ0OiBtYWtlRW0oLXNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogc3ViLmtlcm5cbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoc3VwKSB7XG4gICAgdmFyIF9ib3R0b20gPSBiYXNlLmRlcHRoICsgYmFzZVNoaWZ0O1xuXG4gICAgZmluYWxHcm91cCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiYm90dG9tXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IF9ib3R0b20sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJhc2VcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IHN1cC5rZXJuXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdXAuZWxlbSxcbiAgICAgICAgbWFyZ2luTGVmdDogbWFrZUVtKHNsYW50KVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogb3B0aW9ucy5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzVcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBjYXNlIHByb2JhYmx5IHNob3VsZG4ndCBvY2N1ciAodGhpcyB3b3VsZCBtZWFuIHRoZVxuICAgIC8vIHN1cHN1YiB3YXMgc2VuZGluZyB1cyBhIGdyb3VwIHdpdGggbm8gc3VwZXJzY3JpcHQgb3JcbiAgICAvLyBzdWJzY3JpcHQpIGJ1dCBiZSBzYWZlLlxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gW2ZpbmFsR3JvdXBdO1xuXG4gIGlmIChzdWIgJiYgc2xhbnQgIT09IDAgJiYgIXN1YklzU2luZ2xlQ2hhcmFjdGVyKSB7XG4gICAgLy8gQSBuZWdhdGl2ZSBtYXJnaW4tbGVmdCB3YXMgYXBwbGllZCB0byB0aGUgbG93ZXIgbGltaXQuXG4gICAgLy8gQXZvaWQgYW4gb3ZlcmxhcCBieSBwbGFjaW5nIGEgc3BhY2VyIG9uIHRoZSBsZWZ0IG9uIHRoZSBncm91cC5cbiAgICB2YXIgc3BhY2VyID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibXNwYWNlXCJdLCBbXSwgb3B0aW9ucyk7XG4gICAgc3BhY2VyLnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFrZUVtKHNsYW50KTtcbiAgICBwYXJ0cy51bnNoaWZ0KHNwYWNlcik7XG4gIH1cblxuICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCIsIFwib3AtbGltaXRzXCJdLCBwYXJ0cywgb3B0aW9ucyk7XG59O1xuXG4vLyBMaW1pdHMsIHN5bWJvbHNcbi8vIE1vc3Qgb3BlcmF0b3JzIGhhdmUgYSBsYXJnZSBzdWNjZXNzb3Igc3ltYm9sLCBidXQgdGhlc2UgZG9uJ3QuXG52YXIgbm9TdWNjZXNzb3IgPSBbXCJcXFxcc21hbGxpbnRcIl07IC8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5IFwib3BcIiwgYnV0IGFsc29cbi8vIFwic3Vwc3ViXCIgc2luY2Ugc29tZSBvZiB0aGVtIChsaWtlIFxcaW50KSBjYW4gYWZmZWN0IHN1cGVyL3N1YnNjcmlwdGluZy5cblxudmFyIGh0bWxCdWlsZGVyJDIgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wXCIpO1xuICAgIGhhc0xpbWl0cyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZ3JvdXAgPSBhc3NlcnROb2RlVHlwZShncnAsIFwib3BcIik7XG4gIH1cblxuICB2YXIgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICB2YXIgbGFyZ2UgPSBmYWxzZTtcblxuICBpZiAoc3R5bGUuc2l6ZSA9PT0gU3R5bGUkMS5ESVNQTEFZLnNpemUgJiYgZ3JvdXAuc3ltYm9sICYmICF1dGlscy5jb250YWlucyhub1N1Y2Nlc3NvciwgZ3JvdXAubmFtZSkpIHtcbiAgICAvLyBNb3N0IHN5bWJvbCBvcGVyYXRvcnMgZ2V0IGxhcmdlciBpbiBkaXNwbGF5c3R5bGUgKHJ1bGUgMTMpXG4gICAgbGFyZ2UgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGJhc2U7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBzeW1ib2wsIGNyZWF0ZSB0aGUgc3ltYm9sLlxuICAgIHZhciBmb250TmFtZSA9IGxhcmdlID8gXCJTaXplMi1SZWd1bGFyXCIgOiBcIlNpemUxLVJlZ3VsYXJcIjtcbiAgICB2YXIgc3Rhc2ggPSBcIlwiO1xuXG4gICAgaWYgKGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paW50XCIgfHwgZ3JvdXAubmFtZSA9PT0gXCJcXFxcb2lpaW50XCIpIHtcbiAgICAgIC8vIE5vIGZvbnQgZ2x5cGhzIHlldCwgc28gdXNlIGEgZ2x5cGggdy9vIHRoZSBvdmFsLlxuICAgICAgLy8gVE9ETzogV2hlbiBmb250IGdseXBocyBhcmUgYXZhaWxhYmxlLCBkZWxldGUgdGhpcyBjb2RlLlxuICAgICAgc3Rhc2ggPSBncm91cC5uYW1lLnNsaWNlKDEpO1xuICAgICAgZ3JvdXAubmFtZSA9IHN0YXNoID09PSBcIm9paW50XCIgPyBcIlxcXFxpaW50XCIgOiBcIlxcXFxpaWludFwiO1xuICAgIH1cblxuICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3ltYm9sKGdyb3VwLm5hbWUsIGZvbnROYW1lLCBcIm1hdGhcIiwgb3B0aW9ucywgW1wibW9wXCIsIFwib3Atc3ltYm9sXCIsIGxhcmdlID8gXCJsYXJnZS1vcFwiIDogXCJzbWFsbC1vcFwiXSk7XG5cbiAgICBpZiAoc3Rhc2gubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2UncmUgaW4gXFxvaWludCBvciBcXG9paWludC4gT3ZlcmxheSB0aGUgb3ZhbC5cbiAgICAgIC8vIFRPRE86IFdoZW4gZm9udCBnbHlwaHMgYXJlIGF2YWlsYWJsZSwgZGVsZXRlIHRoaXMgY29kZS5cbiAgICAgIHZhciBpdGFsaWMgPSBiYXNlLml0YWxpYztcbiAgICAgIHZhciBvdmFsID0gYnVpbGRDb21tb24uc3RhdGljU3ZnKHN0YXNoICsgXCJTaXplXCIgKyAobGFyZ2UgPyBcIjJcIiA6IFwiMVwiKSwgb3B0aW9ucyk7XG4gICAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgICAgcG9zaXRpb25UeXBlOiBcImluZGl2aWR1YWxTaGlmdFwiLFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBiYXNlLFxuICAgICAgICAgIHNoaWZ0OiAwXG4gICAgICAgIH0sIHtcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiBvdmFsLFxuICAgICAgICAgIHNoaWZ0OiBsYXJnZSA/IDAuMDggOiAwXG4gICAgICAgIH1dXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIGdyb3VwLm5hbWUgPSBcIlxcXFxcIiArIHN0YXNoO1xuICAgICAgYmFzZS5jbGFzc2VzLnVuc2hpZnQoXCJtb3BcIik7IC8vICRGbG93Rml4TWVcblxuICAgICAgYmFzZS5pdGFsaWMgPSBpdGFsaWM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgbGlzdCwgY29tcG9zZSB0aGF0IGxpc3QuXG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSk7XG5cbiAgICBpZiAoaW5uZXIubGVuZ3RoID09PSAxICYmIGlubmVyWzBdIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgYmFzZSA9IGlubmVyWzBdO1xuICAgICAgYmFzZS5jbGFzc2VzWzBdID0gXCJtb3BcIjsgLy8gcmVwbGFjZSBvbGQgbWNsYXNzXG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3BcIl0sIGlubmVyLCBvcHRpb25zKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgdGV4dCBvcGVyYXRvci4gQnVpbGQgdGhlIHRleHQgZnJvbSB0aGVcbiAgICAvLyBvcGVyYXRvcidzIG5hbWUuXG4gICAgdmFyIG91dHB1dCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBncm91cC5uYW1lLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXRwdXQucHVzaChidWlsZENvbW1vbi5tYXRoc3ltKGdyb3VwLm5hbWVbaV0sIGdyb3VwLm1vZGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBvdXRwdXQsIG9wdGlvbnMpO1xuICB9IC8vIElmIGNvbnRlbnQgb2Ygb3AgaXMgYSBzaW5nbGUgc3ltYm9sLCBzaGlmdCBpdCB2ZXJ0aWNhbGx5LlxuXG5cbiAgdmFyIGJhc2VTaGlmdCA9IDA7XG4gIHZhciBzbGFudCA9IDA7XG5cbiAgaWYgKChiYXNlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSB8fCBncm91cC5uYW1lID09PSBcIlxcXFxvaWludFwiIHx8IGdyb3VwLm5hbWUgPT09IFwiXFxcXG9paWludFwiKSAmJiAhZ3JvdXAuc3VwcHJlc3NCYXNlU2hpZnQpIHtcbiAgICAvLyBXZSBzdXBwcmVzcyB0aGUgc2hpZnQgb2YgdGhlIGJhc2Ugb2YgXFxvdmVyc2V0IGFuZCBcXHVuZGVyc2V0LiBPdGhlcndpc2UsXG4gICAgLy8gc2hpZnQgdGhlIHN5bWJvbCBzbyBpdHMgY2VudGVyIGxpZXMgb24gdGhlIGF4aXMgKHJ1bGUgMTMpLiBJdFxuICAgIC8vIGFwcGVhcnMgdGhhdCBvdXIgZm9udHMgaGF2ZSB0aGUgY2VudGVycyBvZiB0aGUgc3ltYm9scyBhbHJlYWR5XG4gICAgLy8gYWxtb3N0IG9uIHRoZSBheGlzLCBzbyB0aGVzZSBudW1iZXJzIGFyZSB2ZXJ5IHNtYWxsLiBOb3RlIHdlXG4gICAgLy8gZG9uJ3QgYWN0dWFsbHkgYXBwbHkgdGhpcyBoZXJlLCBidXQgaW5zdGVhZCBpdCBpcyB1c2VkIGVpdGhlciBpblxuICAgIC8vIHRoZSB2bGlzdCBjcmVhdGlvbiBvciBzZXBhcmF0ZWx5IHdoZW4gdGhlcmUgYXJlIG5vIGxpbWl0cy5cbiAgICBiYXNlU2hpZnQgPSAoYmFzZS5oZWlnaHQgLSBiYXNlLmRlcHRoKSAvIDIgLSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDsgLy8gVGhlIHNsYW50IG9mIHRoZSBzeW1ib2wgaXMganVzdCBpdHMgaXRhbGljIGNvcnJlY3Rpb24uXG4gICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgc2xhbnQgPSBiYXNlLml0YWxpYztcbiAgfVxuXG4gIGlmIChoYXNMaW1pdHMpIHtcbiAgICByZXR1cm4gYXNzZW1ibGVTdXBTdWIoYmFzZSwgc3VwR3JvdXAsIHN1Ykdyb3VwLCBvcHRpb25zLCBzdHlsZSwgc2xhbnQsIGJhc2VTaGlmdCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2VTaGlmdCkge1xuICAgICAgYmFzZS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgIGJhc2Uuc3R5bGUudG9wID0gbWFrZUVtKGJhc2VTaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyJDEgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIG5vZGU7XG5cbiAgaWYgKGdyb3VwLnN5bWJvbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW1ib2wuIEp1c3QgYWRkIHRoZSBzeW1ib2wuXG4gICAgbm9kZSA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC5uYW1lLCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKHV0aWxzLmNvbnRhaW5zKG5vU3VjY2Vzc29yLCBncm91cC5uYW1lKSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXJnZW9wXCIsIFwiZmFsc2VcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGdyb3VwLmJvZHkpIHtcbiAgICAvLyBUaGlzIGlzIGFuIG9wZXJhdG9yIHdpdGggY2hpbGRyZW4uIEFkZCB0aGVtLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtb1wiLCBidWlsZEV4cHJlc3Npb24oZ3JvdXAuYm9keSwgb3B0aW9ucykpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSB0ZXh0IG9wZXJhdG9yLiBBZGQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlXG4gICAgLy8gb3BlcmF0b3IncyBuYW1lLlxuICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtaVwiLCBbbmV3IFRleHROb2RlKGdyb3VwLm5hbWUuc2xpY2UoMSkpXSk7IC8vIEFwcGVuZCBhbiA8bW8+JkFwcGx5RnVuY3Rpb247PC9tbz4uXG4gICAgLy8gcmVmOiBodHRwczovL3d3dy53My5vcmcvVFIvUkVDLU1hdGhNTC9jaGFwM18yLmh0bWwjc2VjMy4yLjRcblxuICAgIHZhciBvcGVyYXRvciA9IG5ldyBNYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChcIlxcdTIwNjFcIiwgXCJ0ZXh0XCIpXSk7XG5cbiAgICBpZiAoZ3JvdXAucGFyZW50SXNTdXBTdWIpIHtcbiAgICAgIG5vZGUgPSBuZXcgTWF0aE5vZGUoXCJtcm93XCIsIFtub2RlLCBvcGVyYXRvcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3RG9jdW1lbnRGcmFnbWVudChbbm9kZSwgb3BlcmF0b3JdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbnZhciBzaW5nbGVDaGFyQmlnT3BzID0ge1xuICBcIlxcdTIyMEZcIjogXCJcXFxccHJvZFwiLFxuICBcIlxcdTIyMTBcIjogXCJcXFxcY29wcm9kXCIsXG4gIFwiXFx1MjIxMVwiOiBcIlxcXFxzdW1cIixcbiAgXCJcXHUyMmMwXCI6IFwiXFxcXGJpZ3dlZGdlXCIsXG4gIFwiXFx1MjJjMVwiOiBcIlxcXFxiaWd2ZWVcIixcbiAgXCJcXHUyMmMyXCI6IFwiXFxcXGJpZ2NhcFwiLFxuICBcIlxcdTIyYzNcIjogXCJcXFxcYmlnY3VwXCIsXG4gIFwiXFx1MmEwMFwiOiBcIlxcXFxiaWdvZG90XCIsXG4gIFwiXFx1MmEwMVwiOiBcIlxcXFxiaWdvcGx1c1wiLFxuICBcIlxcdTJhMDJcIjogXCJcXFxcYmlnb3RpbWVzXCIsXG4gIFwiXFx1MmEwNFwiOiBcIlxcXFxiaWd1cGx1c1wiLFxuICBcIlxcdTJhMDZcIjogXCJcXFxcYmlnc3FjdXBcIlxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGNvcHJvZFwiLCBcIlxcXFxiaWd2ZWVcIiwgXCJcXFxcYmlnd2VkZ2VcIiwgXCJcXFxcYmlndXBsdXNcIiwgXCJcXFxcYmlnY2FwXCIsIFwiXFxcXGJpZ2N1cFwiLCBcIlxcXFxpbnRvcFwiLCBcIlxcXFxwcm9kXCIsIFwiXFxcXHN1bVwiLCBcIlxcXFxiaWdvdGltZXNcIiwgXCJcXFxcYmlnb3BsdXNcIiwgXCJcXFxcYmlnb2RvdFwiLCBcIlxcXFxiaWdzcWN1cFwiLCBcIlxcXFxzbWFsbGludFwiLCBcIlxcdTIyMEZcIiwgXCJcXHUyMjEwXCIsIFwiXFx1MjIxMVwiLCBcIlxcdTIyYzBcIiwgXCJcXHUyMmMxXCIsIFwiXFx1MjJjMlwiLCBcIlxcdTIyYzNcIiwgXCJcXHUyYTAwXCIsIFwiXFx1MmEwMVwiLCBcIlxcdTJhMDJcIiwgXCJcXHUyYTA0XCIsIFwiXFx1MmEwNlwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJCaWdPcHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogdHJ1ZSxcbiAgICAgIHBhcmVudElzU3VwU3ViOiBmYWxzZSxcbiAgICAgIHN5bWJvbDogdHJ1ZSxcbiAgICAgIG5hbWU6IGZOYW1lXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIE5vdGU6IGNhbGxpbmcgZGVmaW5lRnVuY3Rpb24gd2l0aCBhIHR5cGUgdGhhdCdzIGFscmVhZHkgYmVlbiBkZWZpbmVkIG9ubHlcbi8vIHdvcmtzIGJlY2F1c2UgdGhlIHNhbWUgaHRtbEJ1aWxkZXIgYW5kIG1hdGhtbEJ1aWxkZXIgYXJlIGJlaW5nIHVzZWQuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXG1hdGhvcFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIHByaW1pdGl2ZTogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZjIsIGFyZ3MpID0+IHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWYyO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlLFxuICAgICAgc3ltYm9sOiBmYWxzZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7IC8vIFRoZXJlIGFyZSAyIGZsYWdzIGZvciBvcGVyYXRvcnM7IHdoZXRoZXIgdGhleSBwcm9kdWNlIGxpbWl0cyBpblxuLy8gZGlzcGxheXN0eWxlLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzeW1ib2xzIGFuZCBzaG91bGQgZ3JvdyBpblxuLy8gZGlzcGxheXN0eWxlLiBUaGVzZSBmb3VyIGdyb3VwcyBjb3ZlciB0aGUgZm91ciBwb3NzaWJsZSBjaG9pY2VzLlxuXG52YXIgc2luZ2xlQ2hhckludGVncmFscyA9IHtcbiAgXCJcXHUyMjJiXCI6IFwiXFxcXGludFwiLFxuICBcIlxcdTIyMmNcIjogXCJcXFxcaWludFwiLFxuICBcIlxcdTIyMmRcIjogXCJcXFxcaWlpbnRcIixcbiAgXCJcXHUyMjJlXCI6IFwiXFxcXG9pbnRcIixcbiAgXCJcXHUyMjJmXCI6IFwiXFxcXG9paW50XCIsXG4gIFwiXFx1MjIzMFwiOiBcIlxcXFxvaWlpbnRcIlxufTsgLy8gTm8gbGltaXRzLCBub3Qgc3ltYm9sc1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3BcIixcbiAgbmFtZXM6IFtcIlxcXFxhcmNzaW5cIiwgXCJcXFxcYXJjY29zXCIsIFwiXFxcXGFyY3RhblwiLCBcIlxcXFxhcmN0Z1wiLCBcIlxcXFxhcmNjdGdcIiwgXCJcXFxcYXJnXCIsIFwiXFxcXGNoXCIsIFwiXFxcXGNvc1wiLCBcIlxcXFxjb3NlY1wiLCBcIlxcXFxjb3NoXCIsIFwiXFxcXGNvdFwiLCBcIlxcXFxjb3RnXCIsIFwiXFxcXGNvdGhcIiwgXCJcXFxcY3NjXCIsIFwiXFxcXGN0Z1wiLCBcIlxcXFxjdGhcIiwgXCJcXFxcZGVnXCIsIFwiXFxcXGRpbVwiLCBcIlxcXFxleHBcIiwgXCJcXFxcaG9tXCIsIFwiXFxcXGtlclwiLCBcIlxcXFxsZ1wiLCBcIlxcXFxsblwiLCBcIlxcXFxsb2dcIiwgXCJcXFxcc2VjXCIsIFwiXFxcXHNpblwiLCBcIlxcXFxzaW5oXCIsIFwiXFxcXHNoXCIsIFwiXFxcXHRhblwiLCBcIlxcXFx0YW5oXCIsIFwiXFxcXHRnXCIsIFwiXFxcXHRoXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDBcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWYzO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBMaW1pdHMsIG5vdCBzeW1ib2xzXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcFwiLFxuICBuYW1lczogW1wiXFxcXGRldFwiLCBcIlxcXFxnY2RcIiwgXCJcXFxcaW5mXCIsIFwiXFxcXGxpbVwiLCBcIlxcXFxtYXhcIiwgXCJcXFxcbWluXCIsIFwiXFxcXFByXCIsIFwiXFxcXHN1cFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmNCkge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmNDtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBsaW1pdHM6IHRydWUsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IGZhbHNlLFxuICAgICAgbmFtZTogZnVuY05hbWVcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyOiBodG1sQnVpbGRlciQyLFxuICBtYXRobWxCdWlsZGVyOiBtYXRobWxCdWlsZGVyJDFcbn0pOyAvLyBObyBsaW1pdHMsIHN5bWJvbHNcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcIm9wXCIsXG4gIG5hbWVzOiBbXCJcXFxcaW50XCIsIFwiXFxcXGlpbnRcIiwgXCJcXFxcaWlpbnRcIiwgXCJcXFxcb2ludFwiLCBcIlxcXFxvaWludFwiLCBcIlxcXFxvaWlpbnRcIiwgXCJcXHUyMjJiXCIsIFwiXFx1MjIyY1wiLCBcIlxcdTIyMmRcIiwgXCJcXHUyMjJlXCIsIFwiXFx1MjIyZlwiLCBcIlxcdTIyMzBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMFxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZjUpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyLFxuICAgICAgZnVuY05hbWVcbiAgICB9ID0gX3JlZjU7XG4gICAgdmFyIGZOYW1lID0gZnVuY05hbWU7XG5cbiAgICBpZiAoZk5hbWUubGVuZ3RoID09PSAxKSB7XG4gICAgICBmTmFtZSA9IHNpbmdsZUNoYXJJbnRlZ3JhbHNbZk5hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm9wXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGxpbWl0czogZmFsc2UsXG4gICAgICBwYXJlbnRJc1N1cFN1YjogZmFsc2UsXG4gICAgICBzeW1ib2w6IHRydWUsXG4gICAgICBuYW1lOiBmTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDIsXG4gIG1hdGhtbEJ1aWxkZXI6IG1hdGhtbEJ1aWxkZXIkMVxufSk7XG5cbi8vIE5PVEU6IFVubGlrZSBtb3N0IGBodG1sQnVpbGRlcmBzLCB0aGlzIG9uZSBoYW5kbGVzIG5vdCBvbmx5XG4vLyBcIm9wZXJhdG9ybmFtZVwiLCBidXQgYWxzbyAgXCJzdXBzdWJcIiBzaW5jZSBcXG9wZXJhdG9ybmFtZSogY2FuXG4vLyBhZmZlY3Qgc3VwZXIvc3Vic2NyaXB0aW5nLlxudmFyIGh0bWxCdWlsZGVyJDEgPSAoZ3JwLCBvcHRpb25zKSA9PiB7XG4gIC8vIE9wZXJhdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZy4gNDQzLTQ0NCwgcnVsZSAxMyhhKS5cbiAgdmFyIHN1cEdyb3VwO1xuICB2YXIgc3ViR3JvdXA7XG4gIHZhciBoYXNMaW1pdHMgPSBmYWxzZTtcbiAgdmFyIGdyb3VwO1xuXG4gIGlmIChncnAudHlwZSA9PT0gXCJzdXBzdWJcIikge1xuICAgIC8vIElmIHdlIGhhdmUgbGltaXRzLCBzdXBzdWIgd2lsbCBwYXNzIHVzIGl0cyBncm91cCB0byBoYW5kbGUuIFB1bGxcbiAgICAvLyBvdXQgdGhlIHN1cGVyc2NyaXB0IGFuZCBzdWJzY3JpcHQgYW5kIHNldCB0aGUgZ3JvdXAgdG8gdGhlIG9wIGluXG4gICAgLy8gaXRzIGJhc2UuXG4gICAgc3VwR3JvdXAgPSBncnAuc3VwO1xuICAgIHN1Ykdyb3VwID0gZ3JwLnN1YjtcbiAgICBncm91cCA9IGFzc2VydE5vZGVUeXBlKGdycC5iYXNlLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgICBoYXNMaW1pdHMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGdyb3VwID0gYXNzZXJ0Tm9kZVR5cGUoZ3JwLCBcIm9wZXJhdG9ybmFtZVwiKTtcbiAgfVxuXG4gIHZhciBiYXNlO1xuXG4gIGlmIChncm91cC5ib2R5Lmxlbmd0aCA+IDApIHtcbiAgICB2YXIgYm9keSA9IGdyb3VwLmJvZHkubWFwKGNoaWxkID0+IHtcbiAgICAgIC8vICRGbG93Rml4TWU6IENoZWNrIGlmIHRoZSBub2RlIGhhcyBhIHN0cmluZyBgdGV4dGAgcHJvcGVydHkuXG4gICAgICB2YXIgY2hpbGRUZXh0ID0gY2hpbGQudGV4dDtcblxuICAgICAgaWYgKHR5cGVvZiBjaGlsZFRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiBjaGlsZC5tb2RlLFxuICAgICAgICAgIHRleHQ6IGNoaWxkVGV4dFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDb25zb2xpZGF0ZSBmdW5jdGlvbiBuYW1lcyBpbnRvIHN5bWJvbCBjaGFyYWN0ZXJzLlxuXG4gICAgdmFyIGV4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb24kMShib2R5LCBvcHRpb25zLndpdGhGb250KFwibWF0aHJtXCIpLCB0cnVlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgICAvLyBQZXIgYW1zb3BuIHBhY2thZ2UsXG4gICAgICAgIC8vIGNoYW5nZSBtaW51cyB0byBoeXBoZW4gYW5kIFxcYXN0IHRvIGFzdGVyaXNrXG4gICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBleHByZXNzaW9uLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9wXCJdLCBbXSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoaGFzTGltaXRzKSB7XG4gICAgcmV0dXJuIGFzc2VtYmxlU3VwU3ViKGJhc2UsIHN1cEdyb3VwLCBzdWJHcm91cCwgb3B0aW9ucywgb3B0aW9ucy5zdHlsZSwgMCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbn07XG5cbnZhciBtYXRobWxCdWlsZGVyID0gKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gIC8vIFRoZSBzdGVwcyB0YWtlbiBoZXJlIGFyZSBzaW1pbGFyIHRvIHRoZSBodG1sIHZlcnNpb24uXG4gIHZhciBleHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aEZvbnQoXCJtYXRocm1cIikpOyAvLyBJcyBleHByZXNzaW9uIGEgc3RyaW5nIG9yIGhhcyBpdCBzb21ldGhpbmcgbGlrZSBhIGZyYWN0aW9uP1xuXG4gIHZhciBpc0FsbFN0cmluZyA9IHRydWU7IC8vIGRlZmF1bHRcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbm9kZSA9IGV4cHJlc3Npb25baV07XG5cbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIG1hdGhNTFRyZWUuU3BhY2VOb2RlKSA7IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLk1hdGhOb2RlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIFwibWlcIjpcbiAgICAgICAgY2FzZSBcIm1uXCI6XG4gICAgICAgIGNhc2UgXCJtc1wiOlxuICAgICAgICBjYXNlIFwibXNwYWNlXCI6XG4gICAgICAgIGNhc2UgXCJtdGV4dFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBEbyBub3RoaW5nIHlldC5cblxuICAgICAgICBjYXNlIFwibW9cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgY2hpbGQgaW5zdGFuY2VvZiBtYXRoTUxUcmVlLlRleHROb2RlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLnRleHQgPSBjaGlsZC50ZXh0LnJlcGxhY2UoL1xcdTIyMTIvLCBcIi1cIikucmVwbGFjZSgvXFx1MjIxNy8sIFwiKlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQWxsU3RyaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQWxsU3RyaW5nKSB7XG4gICAgLy8gV3JpdGUgYSBzaW5nbGUgVGV4dE5vZGUgaW5zdGVhZCBvZiBtdWx0aXBsZSBuZXN0ZWQgdGFncy5cbiAgICB2YXIgd29yZCA9IGV4cHJlc3Npb24ubWFwKG5vZGUgPT4gbm9kZS50b1RleHQoKSkuam9pbihcIlwiKTtcbiAgICBleHByZXNzaW9uID0gW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKHdvcmQpXTtcbiAgfVxuXG4gIHZhciBpZGVudGlmaWVyID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBleHByZXNzaW9uKTtcbiAgaWRlbnRpZmllci5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm5vcm1hbFwiKTsgLy8gXFx1MjA2MSBpcyB0aGUgc2FtZSBhcyAmQXBwbHlGdW5jdGlvbjtcbiAgLy8gcmVmOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2NoYXJzZXRzL3JlZl9odG1sX2VudGl0aWVzX2EuYXNwXG5cbiAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbWFrZVRleHQoXCJcXHUyMDYxXCIsIFwidGV4dFwiKV0pO1xuXG4gIGlmIChncm91cC5wYXJlbnRJc1N1cFN1Yikge1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb3dcIiwgW2lkZW50aWZpZXIsIG9wZXJhdG9yXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGhNTFRyZWUubmV3RG9jdW1lbnRGcmFnbWVudChbaWRlbnRpZmllciwgb3BlcmF0b3JdKTtcbiAgfVxufTsgLy8gXFxvcGVyYXRvcm5hbWVcbi8vIGFtc29wbi5kdHg6IFxcbWF0aG9weyMxXFxrZXJuXFx6QFxcb3BlcmF0b3JAZm9udCMzfVxcbmV3bWNvZGVzQFxuXG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgbmFtZXM6IFtcIlxcXFxvcGVyYXRvcm5hbWVAXCIsIFwiXFxcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXIsXG4gICAgICBmdW5jTmFtZVxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvcGVyYXRvcm5hbWVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBhbHdheXNIYW5kbGVTdXBTdWI6IGZ1bmNOYW1lID09PSBcIlxcXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXCIsXG4gICAgICBsaW1pdHM6IGZhbHNlLFxuICAgICAgcGFyZW50SXNTdXBTdWI6IGZhbHNlXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IGh0bWxCdWlsZGVyJDEsXG4gIG1hdGhtbEJ1aWxkZXJcbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcb3BlcmF0b3JuYW1lXCIsIFwiXFxcXEBpZnN0YXJcXFxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcXFxvcGVyYXRvcm5hbWVAXCIpO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJvcmRncm91cFwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKGdyb3VwLnNlbWlzaW1wbGUpIHtcbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgb3B0aW9ucywgdHJ1ZSksIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMsIHRydWUpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwib3ZlcmxpbmVcIixcbiAgbmFtZXM6IFtcIlxcXFxvdmVybGluZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdmVybGluZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE92ZXJsaW5lcyBhcmUgaGFuZGxlZCBpbiB0aGUgVGVYYm9vayBwZyA0NDMsIFJ1bGUgOS5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAgaW4gdGhlIGNyYW1wZWQgc3R5bGUuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7IC8vIENyZWF0ZSB0aGUgbGluZSBhYm92ZSB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJvdmVybGluZS1saW5lXCIsIG9wdGlvbnMpOyAvLyBHZW5lcmF0ZSB0aGUgdmxpc3QsIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtlcm5zXG5cbiAgICB2YXIgZGVmYXVsdFJ1bGVUaGlja25lc3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3M7XG4gICAgdmFyIHZsaXN0ID0gYnVpbGRDb21tb24ubWFrZVZMaXN0KHtcbiAgICAgIHBvc2l0aW9uVHlwZTogXCJmaXJzdEJhc2VsaW5lXCIsXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGlubmVyR3JvdXBcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJrZXJuXCIsXG4gICAgICAgIHNpemU6IDMgKiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogZGVmYXVsdFJ1bGVUaGlja25lc3NcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJvdmVybGluZVwiXSwgW3ZsaXN0XSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBvcGVyYXRvciA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW9cIiwgW25ldyBtYXRoTUxUcmVlLlRleHROb2RlKFwiXFx1MjAzZVwiKV0pO1xuICAgIG9wZXJhdG9yLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwidHJ1ZVwiKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibW92ZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwicGhhbnRvbVwiLFxuICBuYW1lczogW1wiXFxcXHBoYW50b21cIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJwaGFudG9tXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IG9yZGFyZ3VtZW50KGJvZHkpXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBlbGVtZW50cyA9IGJ1aWxkRXhwcmVzc2lvbiQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSwgZmFsc2UpOyAvLyBcXHBoYW50b20gaXNuJ3Qgc3VwcG9zZWQgdG8gYWZmZWN0IHRoZSBlbGVtZW50cyBpdCBjb250YWlucy5cbiAgICAvLyBTZWUgXCJjb2xvclwiIGZvciBtb3JlIGRldGFpbHMuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZUZyYWdtZW50KGVsZW1lbnRzKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1waGFudG9tXCIsIGlubmVyKTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwiaHBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFxocGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYyLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMjtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiaHBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtdLCBbYnVpbGRHcm91cCQxKGdyb3VwLmJvZHksIG9wdGlvbnMud2l0aFBoYW50b20oKSldKTtcbiAgICBub2RlLmhlaWdodCA9IDA7XG4gICAgbm9kZS5kZXB0aCA9IDA7XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5baV0uaGVpZ2h0ID0gMDtcbiAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5kZXB0aCA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBTZWUgc21hc2ggZm9yIGNvbW1lbnQgcmU6IHVzZSBvZiBtYWtlVkxpc3RcblxuXG4gICAgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBub2RlXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpOyAvLyBGb3Igc3BhY2luZywgVGVYIHRyZWF0cyBcXHNtYXNoIGFzIGEgbWF0aCBncm91cCAoc2FtZSBzcGFjaW5nIGFzIG9yZCkuXG5cbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wibW9yZFwiXSwgW25vZGVdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCIwcHhcIik7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidnBoYW50b21cIixcbiAgbmFtZXM6IFtcIlxcXFx2cGhhbnRvbVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcbiAgaGFuZGxlcjogKF9yZWYzLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmMztcbiAgICB2YXIgYm9keSA9IGFyZ3NbMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidnBoYW50b21cIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG4gIGh0bWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgaW5uZXIgPSBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJpbm5lclwiXSwgW2J1aWxkR3JvdXAkMShncm91cC5ib2R5LCBvcHRpb25zLndpdGhQaGFudG9tKCkpXSk7XG4gICAgdmFyIGZpeCA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImZpeFwiXSwgW10pO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwicmxhcFwiXSwgW2lubmVyLCBmaXhdLCBvcHRpb25zKTtcbiAgfSxcbiAgbWF0aG1sQnVpbGRlcjogKGdyb3VwLCBvcHRpb25zKSA9PiB7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKG9yZGFyZ3VtZW50KGdyb3VwLmJvZHkpLCBvcHRpb25zKTtcbiAgICB2YXIgcGhhbnRvbSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBoYW50b21cIiwgaW5uZXIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtcGFkZGVkXCIsIFtwaGFudG9tXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjBweFwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJyYWlzZWJveFwiLFxuICBuYW1lczogW1wiXFxcXHJhaXNlYm94XCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDIsXG4gICAgYXJnVHlwZXM6IFtcInNpemVcIiwgXCJoYm94XCJdLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWVcbiAgfSxcblxuICBoYW5kbGVyKF9yZWYsIGFyZ3MpIHtcbiAgICB2YXIge1xuICAgICAgcGFyc2VyXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGFtb3VudCA9IGFzc2VydE5vZGVUeXBlKGFyZ3NbMF0sIFwic2l6ZVwiKS52YWx1ZTtcbiAgICB2YXIgYm9keSA9IGFyZ3NbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicmFpc2Vib3hcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgZHk6IGFtb3VudCxcbiAgICAgIGJvZHlcbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGR5ID0gY2FsY3VsYXRlU2l6ZShncm91cC5keSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogLWR5LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBib2R5XG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuICAgIHZhciBkeSA9IGdyb3VwLmR5Lm51bWJlciArIGdyb3VwLmR5LnVuaXQ7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ2b2Zmc2V0XCIsIGR5KTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcImludGVybmFsXCIsXG4gIG5hbWVzOiBbXCJcXFxccmVsYXhcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImludGVybmFsXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZVxuICAgIH07XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJydWxlXCIsXG4gIG5hbWVzOiBbXCJcXFxccnVsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAyLFxuICAgIG51bU9wdGlvbmFsQXJnczogMSxcbiAgICBhcmdUeXBlczogW1wic2l6ZVwiLCBcInNpemVcIiwgXCJzaXplXCJdXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzLCBvcHRBcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBzaGlmdCA9IG9wdEFyZ3NbMF07XG4gICAgdmFyIHdpZHRoID0gYXNzZXJ0Tm9kZVR5cGUoYXJnc1swXSwgXCJzaXplXCIpO1xuICAgIHZhciBoZWlnaHQgPSBhc3NlcnROb2RlVHlwZShhcmdzWzFdLCBcInNpemVcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwicnVsZVwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBzaGlmdDogc2hpZnQgJiYgYXNzZXJ0Tm9kZVR5cGUoc2hpZnQsIFwic2l6ZVwiKS52YWx1ZSxcbiAgICAgIHdpZHRoOiB3aWR0aC52YWx1ZSxcbiAgICAgIGhlaWdodDogaGVpZ2h0LnZhbHVlXG4gICAgfTtcbiAgfSxcblxuICBodG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIE1ha2UgYW4gZW1wdHkgc3BhbiBmb3IgdGhlIHJ1bGVcbiAgICB2YXIgcnVsZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJydWxlXCJdLCBbXSwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgc2hpZnQsIHdpZHRoLCBhbmQgaGVpZ2h0IG9mIHRoZSBydWxlLCBhbmQgYWNjb3VudCBmb3IgdW5pdHNcblxuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7IC8vIFN0eWxlIHRoZSBydWxlIHRvIHRoZSByaWdodCBzaXplXG5cbiAgICBydWxlLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBtYWtlRW0od2lkdGgpO1xuICAgIHJ1bGUuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSBtYWtlRW0oaGVpZ2h0KTtcbiAgICBydWxlLnN0eWxlLmJvdHRvbSA9IG1ha2VFbShzaGlmdCk7IC8vIFJlY29yZCB0aGUgaGVpZ2h0IGFuZCB3aWR0aFxuXG4gICAgcnVsZS53aWR0aCA9IHdpZHRoO1xuICAgIHJ1bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgc2hpZnQ7XG4gICAgcnVsZS5kZXB0aCA9IC1zaGlmdDsgLy8gRm9udCBzaXplIGlzIHRoZSBudW1iZXIgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlc2VydmUgYXQgbGVhc3QgYGFic0hlaWdodGAgc3BhY2UgYWJvdmUgdGhlIGJhc2VsaW5lLlxuICAgIC8vIFRoZSAxLjEyNSBmYWN0b3Igd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWRcblxuICAgIHJ1bGUubWF4Rm9udFNpemUgPSBoZWlnaHQgKiAxLjEyNSAqIG9wdGlvbnMuc2l6ZU11bHRpcGxpZXI7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciB3aWR0aCA9IGNhbGN1bGF0ZVNpemUoZ3JvdXAud2lkdGgsIG9wdGlvbnMpO1xuICAgIHZhciBoZWlnaHQgPSBjYWxjdWxhdGVTaXplKGdyb3VwLmhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIHNoaWZ0ID0gZ3JvdXAuc2hpZnQgPyBjYWxjdWxhdGVTaXplKGdyb3VwLnNoaWZ0LCBvcHRpb25zKSA6IDA7XG4gICAgdmFyIGNvbG9yID0gb3B0aW9ucy5jb2xvciAmJiBvcHRpb25zLmdldENvbG9yKCkgfHwgXCJibGFja1wiO1xuICAgIHZhciBydWxlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJtYXRoYmFja2dyb3VuZFwiLCBjb2xvcik7XG4gICAgcnVsZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBtYWtlRW0od2lkdGgpKTtcbiAgICBydWxlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oaGVpZ2h0KSk7XG4gICAgdmFyIHdyYXBwZXIgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW3J1bGVdKTtcblxuICAgIGlmIChzaGlmdCA+PSAwKSB7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBtYWtlRW0oc2hpZnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcImRlcHRoXCIsIG1ha2VFbSgtc2hpZnQpKTtcbiAgICB9XG5cbiAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZShcInZvZmZzZXRcIiwgbWFrZUVtKHNoaWZ0KSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG4gIH1cblxufSk7XG5cbmZ1bmN0aW9uIHNpemluZ0dyb3VwKHZhbHVlLCBvcHRpb25zLCBiYXNlT3B0aW9ucykge1xuICB2YXIgaW5uZXIgPSBidWlsZEV4cHJlc3Npb24kMSh2YWx1ZSwgb3B0aW9ucywgZmFsc2UpO1xuICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBiYXNlT3B0aW9ucy5zaXplTXVsdGlwbGllcjsgLy8gQWRkIHNpemUtcmVzZXR0aW5nIGNsYXNzZXMgdG8gdGhlIGlubmVyIGxpc3QgYW5kIHNldCBtYXhGb250U2l6ZVxuICAvLyBtYW51YWxseS4gSGFuZGxlIG5lc3RlZCBzaXplIGNoYW5nZXMuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSBpbm5lcltpXS5jbGFzc2VzLmluZGV4T2YoXCJzaXppbmdcIik7XG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5uZXJbaV0uY2xhc3Nlcywgb3B0aW9ucy5zaXppbmdDbGFzc2VzKGJhc2VPcHRpb25zKSk7XG4gICAgfSBlbHNlIGlmIChpbm5lcltpXS5jbGFzc2VzW3BvcyArIDFdID09PSBcInJlc2V0LXNpemVcIiArIG9wdGlvbnMuc2l6ZSkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5lc3RlZCBzaXplIGNoYW5nZTogZS5nLiwgaW5uZXJbaV0gaXMgdGhlIFwiYlwiIGluXG4gICAgICAvLyBgXFxIdWdlIGEgXFxzbWFsbCBiYC4gT3ZlcnJpZGUgdGhlIG9sZCBzaXplICh0aGUgYHJlc2V0LWAgY2xhc3MpXG4gICAgICAvLyBidXQgbm90IHRoZSBuZXcgc2l6ZS5cbiAgICAgIGlubmVyW2ldLmNsYXNzZXNbcG9zICsgMV0gPSBcInJlc2V0LXNpemVcIiArIGJhc2VPcHRpb25zLnNpemU7XG4gICAgfVxuXG4gICAgaW5uZXJbaV0uaGVpZ2h0ICo9IG11bHRpcGxpZXI7XG4gICAgaW5uZXJbaV0uZGVwdGggKj0gbXVsdGlwbGllcjtcbiAgfVxuXG4gIHJldHVybiBidWlsZENvbW1vbi5tYWtlRnJhZ21lbnQoaW5uZXIpO1xufVxudmFyIHNpemVGdW5jcyA9IFtcIlxcXFx0aW55XCIsIFwiXFxcXHNpeHB0c2l6ZVwiLCBcIlxcXFxzY3JpcHRzaXplXCIsIFwiXFxcXGZvb3Rub3Rlc2l6ZVwiLCBcIlxcXFxzbWFsbFwiLCBcIlxcXFxub3JtYWxzaXplXCIsIFwiXFxcXGxhcmdlXCIsIFwiXFxcXExhcmdlXCIsIFwiXFxcXExBUkdFXCIsIFwiXFxcXGh1Z2VcIiwgXCJcXFxcSHVnZVwiXTtcbnZhciBodG1sQnVpbGRlciA9IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAvLyBIYW5kbGUgc2l6aW5nIG9wZXJhdG9ycyBsaWtlIFxcSHVnZS4gUmVhbCBUZVggZG9lc24ndCBhY3R1YWxseSBhbGxvd1xuICAvLyB0aGVzZSBmdW5jdGlvbnMgaW5zaWRlIG9mIG1hdGggZXhwcmVzc2lvbnMsIHNvIHdlIGRvIHNvbWUgc3BlY2lhbFxuICAvLyBoYW5kbGluZy5cbiAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1NpemUoZ3JvdXAuc2l6ZSk7XG4gIHJldHVybiBzaXppbmdHcm91cChncm91cC5ib2R5LCBuZXdPcHRpb25zLCBvcHRpb25zKTtcbn07XG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwic2l6aW5nXCIsXG4gIG5hbWVzOiBzaXplRnVuY3MsXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMCxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG4gIGhhbmRsZXI6IChfcmVmLCBhcmdzKSA9PiB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgYnJlYWtPblRva2VuVGV4dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6aW5nXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBzaXplIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYWJvdmVcbiAgICAgIHNpemU6IHNpemVGdW5jcy5pbmRleE9mKGZ1bmNOYW1lKSArIDEsXG4gICAgICBib2R5XG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXIsXG4gIG1hdGhtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTaXplKGdyb3VwLnNpemUpO1xuICAgIHZhciBpbm5lciA9IGJ1aWxkRXhwcmVzc2lvbihncm91cC5ib2R5LCBuZXdPcHRpb25zKTtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXN0eWxlXCIsIGlubmVyKTsgLy8gVE9ETyhlbWlseSk6IFRoaXMgZG9lc24ndCBwcm9kdWNlIHRoZSBjb3JyZWN0IHNpemUgZm9yIG5lc3RlZCBzaXplXG4gICAgLy8gY2hhbmdlcywgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHN0YXRlIG9mIHdoYXQgc3R5bGUgd2UncmUgY3VycmVudGx5XG4gICAgLy8gaW4sIHNvIHdlIGNhbid0IHJlc2V0IHRoZSBzaXplIHRvIG5vcm1hbCBiZWZvcmUgY2hhbmdpbmcgaXQuICBOb3dcbiAgICAvLyB0aGF0IHdlJ3JlIHBhc3NpbmcgYW4gb3B0aW9ucyBwYXJhbWV0ZXIgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZml4XG4gICAgLy8gdGhpcy5cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHNpemVcIiwgbWFrZUVtKG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbi8vIHNtYXNoLCB3aXRoIG9wdGlvbmFsIFt0Yl0sIGFzIGluIEFNU1xuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInNtYXNoXCIsXG4gIG5hbWVzOiBbXCJcXFxcc21hc2hcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBudW1PcHRpb25hbEFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuICBoYW5kbGVyOiAoX3JlZiwgYXJncywgb3B0QXJncykgPT4ge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgc21hc2hIZWlnaHQgPSBmYWxzZTtcbiAgICB2YXIgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgIHZhciB0YkFyZyA9IG9wdEFyZ3NbMF0gJiYgYXNzZXJ0Tm9kZVR5cGUob3B0QXJnc1swXSwgXCJvcmRncm91cFwiKTtcblxuICAgIGlmICh0YkFyZykge1xuICAgICAgLy8gT3B0aW9uYWwgW3RiXSBhcmd1bWVudCBpcyBlbmdhZ2VkLlxuICAgICAgLy8gcmVmOiBhbXNtYXRoOiBcXHJlbmV3Y29tbWFuZHtcXHNtYXNofVsxXVt0Yl17JVxuICAgICAgLy8gICAgICAgICAgICAgICBkZWZcXG1iQHR7XFxodH1cXGRlZlxcbWJAYntcXGRwfVxcZGVmXFxtYkB0YntcXGh0XFx6QFxcekBcXGRwfSVcbiAgICAgIHZhciBsZXR0ZXIgPSBcIlwiO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRiQXJnLmJvZHkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0YkFyZy5ib2R5W2ldOyAvLyAkRmxvd0ZpeE1lOiBOb3QgZXZlcnkgbm9kZSB0eXBlIGhhcyBhIGB0ZXh0YCBwcm9wZXJ0eS5cblxuICAgICAgICBsZXR0ZXIgPSBub2RlLnRleHQ7XG5cbiAgICAgICAgaWYgKGxldHRlciA9PT0gXCJ0XCIpIHtcbiAgICAgICAgICBzbWFzaEhlaWdodCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGV0dGVyID09PSBcImJcIikge1xuICAgICAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNtYXNoSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgc21hc2hEZXB0aCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNtYXNoSGVpZ2h0ID0gdHJ1ZTtcbiAgICAgIHNtYXNoRGVwdGggPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzbWFzaFwiLFxuICAgICAgbW9kZTogcGFyc2VyLm1vZGUsXG4gICAgICBib2R5LFxuICAgICAgc21hc2hIZWlnaHQsXG4gICAgICBzbWFzaERlcHRoXG4gICAgfTtcbiAgfSxcbiAgaHRtbEJ1aWxkZXI6IChncm91cCwgb3B0aW9ucykgPT4ge1xuICAgIHZhciBub2RlID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW10sIFtidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyldKTtcblxuICAgIGlmICghZ3JvdXAuc21hc2hIZWlnaHQgJiYgIWdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmIChncm91cC5zbWFzaEhlaWdodCkge1xuICAgICAgbm9kZS5oZWlnaHQgPSAwOyAvLyBJbiBvcmRlciB0byBpbmZsdWVuY2UgbWFrZVZMaXN0LCB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjaGlsZHJlbi5cblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZHJlbltpXS5oZWlnaHQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNoRGVwdGgpIHtcbiAgICAgIG5vZGUuZGVwdGggPSAwO1xuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuW19pXS5kZXB0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIHdlJ3ZlIHJlc2V0IHRoZSBUZVgtbGlrZSBoZWlnaHQgYW5kIGRlcHRoIHZhbHVlcy5cbiAgICAvLyBCdXQgdGhlIHNwYW4gc3RpbGwgaGFzIGFuIEhUTUwgbGluZSBoZWlnaHQuXG4gICAgLy8gbWFrZVZMaXN0IGFwcGxpZXMgXCJkaXNwbGF5OiB0YWJsZS1jZWxsXCIsIHdoaWNoIHByZXZlbnRzIHRoZSBicm93c2VyXG4gICAgLy8gZnJvbSBhY3Rpbmcgb24gdGhhdCBsaW5lIGhlaWdodC4gU28gd2UnbGwgY2FsbCBtYWtlVkxpc3Qgbm93LlxuXG5cbiAgICB2YXIgc21hc2hlZE5vZGUgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgcG9zaXRpb25UeXBlOiBcImZpcnN0QmFzZWxpbmVcIixcbiAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbm9kZVxuICAgICAgfV1cbiAgICB9LCBvcHRpb25zKTsgLy8gRm9yIHNwYWNpbmcsIFRlWCB0cmVhdHMgXFxocGhhbnRvbSBhcyBhIG1hdGggZ3JvdXAgKHNhbWUgc3BhY2luZyBhcyBvcmQpLlxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIl0sIFtzbWFzaGVkTm9kZV0sIG9wdGlvbnMpO1xuICB9LFxuICBtYXRobWxCdWlsZGVyOiAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibXBhZGRlZFwiLCBbYnVpbGRHcm91cChncm91cC5ib2R5LCBvcHRpb25zKV0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNoSGVpZ2h0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAuc21hc2hEZXB0aCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJkZXB0aFwiLCBcIjBweFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzcXJ0XCIsXG4gIG5hbWVzOiBbXCJcXFxcc3FydFwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIG51bU9wdGlvbmFsQXJnczogMVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncywgb3B0QXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICB2YXIgaW5kZXggPSBvcHRBcmdzWzBdO1xuICAgIHZhciBib2R5ID0gYXJnc1swXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzcXJ0XCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTcXVhcmUgcm9vdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgcGcuIDQ0MywgUnVsZSAxMS5cbiAgICAvLyBGaXJzdCwgd2UgZG8gdGhlIHNhbWUgc3RlcHMgYXMgaW4gb3ZlcmxpbmUgdG8gYnVpbGQgdGhlIGlubmVyIGdyb3VwXG4gICAgLy8gYW5kIGxpbmVcbiAgICB2YXIgaW5uZXIgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7XG5cbiAgICBpZiAoaW5uZXIuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAvLyBSZW5kZXIgYSBzbWFsbCBzdXJkLlxuICAgICAgaW5uZXIuaGVpZ2h0ID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBTb21lIGdyb3VwcyBjYW4gcmV0dXJuIGRvY3VtZW50IGZyYWdtZW50cy4gIEhhbmRsZSB0aG9zZSBieSB3cmFwcGluZ1xuICAgIC8vIHRoZW0gaW4gYSBzcGFuLlxuXG5cbiAgICBpbm5lciA9IGJ1aWxkQ29tbW9uLndyYXBGcmFnbWVudChpbm5lciwgb3B0aW9ucyk7IC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSBzaXplIGZvciB0aGUgXFxzdXJkIGRlbGltaXRlclxuXG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7XG4gICAgdmFyIHRoZXRhID0gbWV0cmljcy5kZWZhdWx0UnVsZVRoaWNrbmVzcztcbiAgICB2YXIgcGhpID0gdGhldGE7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZS5pZCA8IFN0eWxlJDEuVEVYVC5pZCkge1xuICAgICAgcGhpID0gb3B0aW9ucy5mb250TWV0cmljcygpLnhIZWlnaHQ7XG4gICAgfSAvLyBDYWxjdWxhdGUgdGhlIGNsZWFyYW5jZSBiZXR3ZWVuIHRoZSBib2R5IGFuZCBsaW5lXG5cblxuICAgIHZhciBsaW5lQ2xlYXJhbmNlID0gdGhldGEgKyBwaGkgLyA0O1xuICAgIHZhciBtaW5EZWxpbWl0ZXJIZWlnaHQgPSBpbm5lci5oZWlnaHQgKyBpbm5lci5kZXB0aCArIGxpbmVDbGVhcmFuY2UgKyB0aGV0YTsgLy8gQ3JlYXRlIGEgc3FydCBTVkcgb2YgdGhlIHJlcXVpcmVkIG1pbmltdW0gc2l6ZVxuXG4gICAgdmFyIHtcbiAgICAgIHNwYW46IGltZyxcbiAgICAgIHJ1bGVXaWR0aCxcbiAgICAgIGFkdmFuY2VXaWR0aFxuICAgIH0gPSBkZWxpbWl0ZXIuc3FydEltYWdlKG1pbkRlbGltaXRlckhlaWdodCwgb3B0aW9ucyk7XG4gICAgdmFyIGRlbGltRGVwdGggPSBpbWcuaGVpZ2h0IC0gcnVsZVdpZHRoOyAvLyBBZGp1c3QgdGhlIGNsZWFyYW5jZSBiYXNlZCBvbiB0aGUgZGVsaW1pdGVyIHNpemVcblxuICAgIGlmIChkZWxpbURlcHRoID4gaW5uZXIuaGVpZ2h0ICsgaW5uZXIuZGVwdGggKyBsaW5lQ2xlYXJhbmNlKSB7XG4gICAgICBsaW5lQ2xlYXJhbmNlID0gKGxpbmVDbGVhcmFuY2UgKyBkZWxpbURlcHRoIC0gaW5uZXIuaGVpZ2h0IC0gaW5uZXIuZGVwdGgpIC8gMjtcbiAgICB9IC8vIFNoaWZ0IHRoZSBzcXJ0IGltYWdlXG5cblxuICAgIHZhciBpbWdTaGlmdCA9IGltZy5oZWlnaHQgLSBpbm5lci5oZWlnaHQgLSBsaW5lQ2xlYXJhbmNlIC0gcnVsZVdpZHRoO1xuICAgIGlubmVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gbWFrZUVtKGFkdmFuY2VXaWR0aCk7IC8vIE92ZXJsYXkgdGhlIGltYWdlIGFuZCB0aGUgYXJndW1lbnQuXG5cbiAgICB2YXIgYm9keSA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwiZmlyc3RCYXNlbGluZVwiLFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lcixcbiAgICAgICAgd3JhcHBlckNsYXNzZXM6IFtcInN2Zy1hbGlnblwiXVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogLShpbm5lci5oZWlnaHQgKyBpbWdTaGlmdClcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGltZ1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogcnVsZVdpZHRoXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFncm91cC5pbmRleCkge1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbYm9keV0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIG9wdGlvbmFsIHJvb3QgaW5kZXhcbiAgICAgIC8vIFRoZSBpbmRleCBpcyBhbHdheXMgaW4gc2NyaXB0c2NyaXB0IHN0eWxlXG4gICAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUoU3R5bGUkMS5TQ1JJUFRTQ1JJUFQpO1xuICAgICAgdmFyIHJvb3RtID0gYnVpbGRHcm91cCQxKGdyb3VwLmluZGV4LCBuZXdPcHRpb25zLCBvcHRpb25zKTsgLy8gVGhlIGFtb3VudCB0aGUgaW5kZXggaXMgc2hpZnRlZCBieS4gVGhpcyBpcyB0YWtlbiBmcm9tIHRoZSBUZVhcbiAgICAgIC8vIHNvdXJjZSwgaW4gdGhlIGRlZmluaXRpb24gb2YgYFxcckBAdGAuXG5cbiAgICAgIHZhciB0b1NoaWZ0ID0gMC42ICogKGJvZHkuaGVpZ2h0IC0gYm9keS5kZXB0aCk7IC8vIEJ1aWxkIGEgVkxpc3Qgd2l0aCB0aGUgc3VwZXJzY3JpcHQgc2hpZnRlZCB1cCBjb3JyZWN0bHlcblxuICAgICAgdmFyIHJvb3RWTGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJzaGlmdFwiLFxuICAgICAgICBwb3NpdGlvbkRhdGE6IC10b1NoaWZ0LFxuICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgICBlbGVtOiByb290bVxuICAgICAgICB9XVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkZCBhIGNsYXNzIHN1cnJvdW5kaW5nIGl0IHNvIHdlIGNhbiBhZGQgb24gdGhlIGFwcHJvcHJpYXRlXG4gICAgICAvLyBrZXJuaW5nXG5cbiAgICAgIHZhciByb290Vkxpc3RXcmFwID0gYnVpbGRDb21tb24ubWFrZVNwYW4oW1wicm9vdFwiXSwgW3Jvb3RWTGlzdF0pO1xuICAgICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJzcXJ0XCJdLCBbcm9vdFZMaXN0V3JhcCwgYm9keV0sIG9wdGlvbnMpO1xuICAgIH1cbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHtcbiAgICAgIGJvZHksXG4gICAgICBpbmRleFxuICAgIH0gPSBncm91cDtcbiAgICByZXR1cm4gaW5kZXggPyBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1yb290XCIsIFtidWlsZEdyb3VwKGJvZHksIG9wdGlvbnMpLCBidWlsZEdyb3VwKGluZGV4LCBvcHRpb25zKV0pIDogbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3FydFwiLCBbYnVpbGRHcm91cChib2R5LCBvcHRpb25zKV0pO1xuICB9XG5cbn0pO1xuXG52YXIgc3R5bGVNYXAgPSB7XG4gIFwiZGlzcGxheVwiOiBTdHlsZSQxLkRJU1BMQVksXG4gIFwidGV4dFwiOiBTdHlsZSQxLlRFWFQsXG4gIFwic2NyaXB0XCI6IFN0eWxlJDEuU0NSSVBULFxuICBcInNjcmlwdHNjcmlwdFwiOiBTdHlsZSQxLlNDUklQVFNDUklQVFxufTtcbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJzdHlsaW5nXCIsXG4gIG5hbWVzOiBbXCJcXFxcZGlzcGxheXN0eWxlXCIsIFwiXFxcXHRleHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzdHlsZVwiLCBcIlxcXFxzY3JpcHRzY3JpcHRzdHlsZVwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAwLFxuICAgIGFsbG93ZWRJblRleHQ6IHRydWUsXG4gICAgcHJpbWl0aXZlOiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIGJyZWFrT25Ub2tlblRleHQsXG4gICAgICBmdW5jTmFtZSxcbiAgICAgIHBhcnNlclxuICAgIH0gPSBfcmVmO1xuICAgIC8vIHBhcnNlIG91dCB0aGUgaW1wbGljaXQgYm9keVxuICAgIHZhciBib2R5ID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbih0cnVlLCBicmVha09uVG9rZW5UZXh0KTsgLy8gVE9ETzogUmVmYWN0b3IgdG8gYXZvaWQgZHVwbGljYXRpbmcgc3R5bGVNYXAgaW4gbXVsdGlwbGUgcGxhY2VzIChlLmcuXG4gICAgLy8gaGVyZSBhbmQgaW4gYnVpbGRIVE1MIGFuZCBkZS1kdXBlIHRoZSBlbnVtZXJhdGlvbiBvZiBhbGwgdGhlIHN0eWxlcykuXG4gICAgLy8gJEZsb3dGaXhNZTogVGhlIG5hbWVzIGFib3ZlIGV4YWN0bHkgbWF0Y2ggdGhlIHN0eWxlcy5cblxuICAgIHZhciBzdHlsZSA9IGZ1bmNOYW1lLnNsaWNlKDEsIGZ1bmNOYW1lLmxlbmd0aCAtIDUpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0eWxpbmdcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHN0eWxlIHRvIHVzZSBieSBwdWxsaW5nIG91dCB0aGUgc3R5bGUgZnJvbVxuICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgIHN0eWxlLFxuICAgICAgYm9keVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBTdHlsZSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIG9uIHBnLiA0NDIsIFJ1bGUgMy5cbiAgICB2YXIgbmV3U3R5bGUgPSBzdHlsZU1hcFtncm91cC5zdHlsZV07XG4gICAgdmFyIG5ld09wdGlvbnMgPSBvcHRpb25zLmhhdmluZ1N0eWxlKG5ld1N0eWxlKS53aXRoRm9udCgnJyk7XG4gICAgcmV0dXJuIHNpemluZ0dyb3VwKGdyb3VwLmJvZHksIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgc3R5bGUgd2UncmUgY2hhbmdpbmcgdG8uXG4gICAgdmFyIG5ld1N0eWxlID0gc3R5bGVNYXBbZ3JvdXAuc3R5bGVdO1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShuZXdTdHlsZSk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uKGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3R5bGVcIiwgaW5uZXIpO1xuICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMgPSB7XG4gICAgICBcImRpc3BsYXlcIjogW1wiMFwiLCBcInRydWVcIl0sXG4gICAgICBcInRleHRcIjogW1wiMFwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRcIjogW1wiMVwiLCBcImZhbHNlXCJdLFxuICAgICAgXCJzY3JpcHRzY3JpcHRcIjogW1wiMlwiLCBcImZhbHNlXCJdXG4gICAgfTtcbiAgICB2YXIgYXR0ciA9IHN0eWxlQXR0cmlidXRlc1tncm91cC5zdHlsZV07XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzY3JpcHRsZXZlbFwiLCBhdHRyWzBdKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImRpc3BsYXlzdHlsZVwiLCBhdHRyWzFdKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcblxuLyoqXG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBzdWJzY3JpcHRzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgYHN1cHN1YmAgZ3JvdXAga25vdyB0aGF0XG4gKiBTb21ldGltZXMsIGdyb3VwcyBwZXJmb3JtIHNwZWNpYWwgcnVsZXMgd2hlbiB0aGV5IGhhdmUgc3VwZXJzY3JpcHRzIG9yXG4gKiBpdHMgaW5uZXIgZWxlbWVudCBzaG91bGQgaGFuZGxlIHRoZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgaW5zdGVhZCBvZlxuICogaGFuZGxpbmcgdGhlbSBpdHNlbGYuXG4gKi9cbnZhciBodG1sQnVpbGRlckRlbGVnYXRlID0gZnVuY3Rpb24gaHRtbEJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucykge1xuICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgaWYgKCFiYXNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wXCIpIHtcbiAgICAvLyBPcGVyYXRvcnMgaGFuZGxlIHN1cHN1YnMgZGlmZmVyZW50bHkgd2hlbiB0aGV5IGhhdmUgbGltaXRzXG4gICAgLy8gKGUuZy4gYFxcZGlzcGxheXN0eWxlXFxzdW1fMl4zYClcbiAgICB2YXIgZGVsZWdhdGUgPSBiYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZS5zaXplID09PSBTdHlsZSQxLkRJU1BMQVkuc2l6ZSB8fCBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1Yik7XG4gICAgcmV0dXJuIGRlbGVnYXRlID8gaHRtbEJ1aWxkZXIkMiA6IG51bGw7XG4gIH0gZWxzZSBpZiAoYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiKSB7XG4gICAgdmFyIF9kZWxlZ2F0ZSA9IGJhc2UuYWx3YXlzSGFuZGxlU3VwU3ViICYmIChvcHRpb25zLnN0eWxlLnNpemUgPT09IFN0eWxlJDEuRElTUExBWS5zaXplIHx8IGJhc2UubGltaXRzKTtcblxuICAgIHJldHVybiBfZGVsZWdhdGUgPyBodG1sQnVpbGRlciQxIDogbnVsbDtcbiAgfSBlbHNlIGlmIChiYXNlLnR5cGUgPT09IFwiYWNjZW50XCIpIHtcbiAgICByZXR1cm4gdXRpbHMuaXNDaGFyYWN0ZXJCb3goYmFzZS5iYXNlKSA/IGh0bWxCdWlsZGVyJGEgOiBudWxsO1xuICB9IGVsc2UgaWYgKGJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICB2YXIgaXNTdXAgPSAhZ3JvdXAuc3ViO1xuICAgIHJldHVybiBpc1N1cCA9PT0gYmFzZS5pc092ZXIgPyBodG1sQnVpbGRlciQzIDogbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsgLy8gU3VwZXIgc2NyaXB0cyBhbmQgc3Vic2NyaXB0cywgd2hvc2UgcHJlY2lzZSBwbGFjZW1lbnQgY2FuIGRlcGVuZCBvbiBvdGhlclxuLy8gZnVuY3Rpb25zIHRoYXQgcHJlY2VkZSB0aGVtLlxuXG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInN1cHN1YlwiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgLy8gU3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdHMgYXJlIGhhbmRsZWQgaW4gdGhlIFRlWGJvb2sgb24gcGFnZVxuICAgIC8vIDQ0NS00NDYsIHJ1bGVzIDE4KGEtZikuXG4gICAgLy8gSGVyZSBpcyB3aGVyZSB3ZSBkZWZlciB0byB0aGUgaW5uZXIgZ3JvdXAgaWYgaXQgc2hvdWxkIGhhbmRsZVxuICAgIC8vIHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBpdHNlbGYuXG4gICAgdmFyIGJ1aWxkZXJEZWxlZ2F0ZSA9IGh0bWxCdWlsZGVyRGVsZWdhdGUoZ3JvdXAsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGJ1aWxkZXJEZWxlZ2F0ZSkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXJEZWxlZ2F0ZShncm91cCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGJhc2U6IHZhbHVlQmFzZSxcbiAgICAgIHN1cDogdmFsdWVTdXAsXG4gICAgICBzdWI6IHZhbHVlU3ViXG4gICAgfSA9IGdyb3VwO1xuICAgIHZhciBiYXNlID0gYnVpbGRHcm91cCQxKHZhbHVlQmFzZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN1cG07XG4gICAgdmFyIHN1Ym07XG4gICAgdmFyIG1ldHJpY3MgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCk7IC8vIFJ1bGUgMThhXG5cbiAgICB2YXIgc3VwU2hpZnQgPSAwO1xuICAgIHZhciBzdWJTaGlmdCA9IDA7XG4gICAgdmFyIGlzQ2hhcmFjdGVyQm94ID0gdmFsdWVCYXNlICYmIHV0aWxzLmlzQ2hhcmFjdGVyQm94KHZhbHVlQmFzZSk7XG5cbiAgICBpZiAodmFsdWVTdXApIHtcbiAgICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1cCgpKTtcbiAgICAgIHN1cG0gPSBidWlsZEdyb3VwJDEodmFsdWVTdXAsIG5ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1cFNoaWZ0ID0gYmFzZS5oZWlnaHQgLSBuZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3VwRHJvcCAqIG5ld09wdGlvbnMuc2l6ZU11bHRpcGxpZXIgLyBvcHRpb25zLnNpemVNdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZVN1Yikge1xuICAgICAgdmFyIF9uZXdPcHRpb25zID0gb3B0aW9ucy5oYXZpbmdTdHlsZShvcHRpb25zLnN0eWxlLnN1YigpKTtcblxuICAgICAgc3VibSA9IGJ1aWxkR3JvdXAkMSh2YWx1ZVN1YiwgX25ld09wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWlzQ2hhcmFjdGVyQm94KSB7XG4gICAgICAgIHN1YlNoaWZ0ID0gYmFzZS5kZXB0aCArIF9uZXdPcHRpb25zLmZvbnRNZXRyaWNzKCkuc3ViRHJvcCAqIF9uZXdPcHRpb25zLnNpemVNdWx0aXBsaWVyIC8gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICB9IC8vIFJ1bGUgMThjXG5cblxuICAgIHZhciBtaW5TdXBTaGlmdDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkpIHtcbiAgICAgIG1pblN1cFNoaWZ0ID0gbWV0cmljcy5zdXAxO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zdHlsZS5jcmFtcGVkKSB7XG4gICAgICBtaW5TdXBTaGlmdCA9IG1ldHJpY3Muc3VwMztcbiAgICB9IGVsc2Uge1xuICAgICAgbWluU3VwU2hpZnQgPSBtZXRyaWNzLnN1cDI7XG4gICAgfSAvLyBzY3JpcHRzcGFjZSBpcyBhIGZvbnQtc2l6ZS1pbmRlcGVuZGVudCBzaXplLCBzbyBzY2FsZSBpdFxuICAgIC8vIGFwcHJvcHJpYXRlbHkgZm9yIHVzZSBhcyB0aGUgbWFyZ2luUmlnaHQuXG5cblxuICAgIHZhciBtdWx0aXBsaWVyID0gb3B0aW9ucy5zaXplTXVsdGlwbGllcjtcbiAgICB2YXIgbWFyZ2luUmlnaHQgPSBtYWtlRW0oMC41IC8gbWV0cmljcy5wdFBlckVtIC8gbXVsdGlwbGllcik7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBudWxsO1xuXG4gICAgaWYgKHN1Ym0pIHtcbiAgICAgIC8vIFN1YnNjcmlwdHMgc2hvdWxkbid0IGJlIHNoaWZ0ZWQgYnkgdGhlIGJhc2UncyBpdGFsaWMgY29ycmVjdGlvbi5cbiAgICAgIC8vIEFjY291bnQgZm9yIHRoYXQgYnkgc2hpZnRpbmcgdGhlIHN1YnNjcmlwdCBiYWNrIHRoZSBhcHByb3ByaWF0ZVxuICAgICAgLy8gYW1vdW50LiBOb3RlIHdlIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBiYXNlIGlzIGEgc2luZ2xlIHN5bWJvbC5cbiAgICAgIHZhciBpc09paW50ID0gZ3JvdXAuYmFzZSAmJiBncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiAmJiBncm91cC5iYXNlLm5hbWUgJiYgKGdyb3VwLmJhc2UubmFtZSA9PT0gXCJcXFxcb2lpbnRcIiB8fCBncm91cC5iYXNlLm5hbWUgPT09IFwiXFxcXG9paWludFwiKTtcblxuICAgICAgaWYgKGJhc2UgaW5zdGFuY2VvZiBTeW1ib2xOb2RlIHx8IGlzT2lpbnQpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBtYXJnaW5MZWZ0ID0gbWFrZUVtKC1iYXNlLml0YWxpYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN1cHN1YjtcblxuICAgIGlmIChzdXBtICYmIHN1Ym0pIHtcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdWJTaGlmdCA9IE1hdGgubWF4KHN1YlNoaWZ0LCBtZXRyaWNzLnN1YjIpO1xuICAgICAgdmFyIHJ1bGVXaWR0aCA9IG1ldHJpY3MuZGVmYXVsdFJ1bGVUaGlja25lc3M7IC8vIFJ1bGUgMThlXG5cbiAgICAgIHZhciBtYXhXaWR0aCA9IDQgKiBydWxlV2lkdGg7XG5cbiAgICAgIGlmIChzdXBTaGlmdCAtIHN1cG0uZGVwdGggLSAoc3VibS5oZWlnaHQgLSBzdWJTaGlmdCkgPCBtYXhXaWR0aCkge1xuICAgICAgICBzdWJTaGlmdCA9IG1heFdpZHRoIC0gKHN1cFNoaWZ0IC0gc3VwbS5kZXB0aCkgKyBzdWJtLmhlaWdodDtcbiAgICAgICAgdmFyIHBzaSA9IDAuOCAqIG1ldHJpY3MueEhlaWdodCAtIChzdXBTaGlmdCAtIHN1cG0uZGVwdGgpO1xuXG4gICAgICAgIGlmIChwc2kgPiAwKSB7XG4gICAgICAgICAgc3VwU2hpZnQgKz0gcHNpO1xuICAgICAgICAgIHN1YlNoaWZ0IC09IHBzaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmxpc3RFbGVtID0gW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1Ym0sXG4gICAgICAgIHNoaWZ0OiBzdWJTaGlmdCxcbiAgICAgICAgbWFyZ2luUmlnaHQsXG4gICAgICAgIG1hcmdpbkxlZnRcbiAgICAgIH0sIHtcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgIHNoaWZ0OiAtc3VwU2hpZnQsXG4gICAgICAgIG1hcmdpblJpZ2h0XG4gICAgICB9XTtcbiAgICAgIHN1cHN1YiA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogXCJpbmRpdmlkdWFsU2hpZnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZsaXN0RWxlbVxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChzdWJtKSB7XG4gICAgICAvLyBSdWxlIDE4YlxuICAgICAgc3ViU2hpZnQgPSBNYXRoLm1heChzdWJTaGlmdCwgbWV0cmljcy5zdWIxLCBzdWJtLmhlaWdodCAtIDAuOCAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICB2YXIgX3ZsaXN0RWxlbSA9IFt7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBzdWJtLFxuICAgICAgICBtYXJnaW5MZWZ0LFxuICAgICAgICBtYXJnaW5SaWdodFxuICAgICAgfV07XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiBzdWJTaGlmdCxcbiAgICAgICAgY2hpbGRyZW46IF92bGlzdEVsZW1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3VwbSkge1xuICAgICAgLy8gUnVsZSAxOGMsIGRcbiAgICAgIHN1cFNoaWZ0ID0gTWF0aC5tYXgoc3VwU2hpZnQsIG1pblN1cFNoaWZ0LCBzdXBtLmRlcHRoICsgMC4yNSAqIG1ldHJpY3MueEhlaWdodCk7XG4gICAgICBzdXBzdWIgPSBidWlsZENvbW1vbi5tYWtlVkxpc3Qoe1xuICAgICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgICAgcG9zaXRpb25EYXRhOiAtc3VwU2hpZnQsXG4gICAgICAgIGNoaWxkcmVuOiBbe1xuICAgICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICAgIGVsZW06IHN1cG0sXG4gICAgICAgICAgbWFyZ2luUmlnaHRcbiAgICAgICAgfV1cbiAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLlwiKTtcbiAgICB9IC8vIFdyYXAgdGhlIHN1cHN1YiB2bGlzdCBpbiBhIHNwYW4ubXN1cHN1YiB0byByZXNldCB0ZXh0LWFsaWduLlxuXG5cbiAgICB2YXIgbWNsYXNzID0gZ2V0VHlwZU9mRG9tVHJlZShiYXNlLCBcInJpZ2h0XCIpIHx8IFwibW9yZFwiO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbbWNsYXNzXSwgW2Jhc2UsIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1zdXBzdWJcIl0sIFtzdXBzdWJdKV0sIG9wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBJcyB0aGUgaW5uZXIgZ3JvdXAgYSByZWxldmFudCBob3Jpem9uYWwgYnJhY2U/XG4gICAgdmFyIGlzQnJhY2UgPSBmYWxzZTtcbiAgICB2YXIgaXNPdmVyO1xuICAgIHZhciBpc1N1cDtcblxuICAgIGlmIChncm91cC5iYXNlICYmIGdyb3VwLmJhc2UudHlwZSA9PT0gXCJob3JpekJyYWNlXCIpIHtcbiAgICAgIGlzU3VwID0gISFncm91cC5zdXA7XG5cbiAgICAgIGlmIChpc1N1cCA9PT0gZ3JvdXAuYmFzZS5pc092ZXIpIHtcbiAgICAgICAgaXNCcmFjZSA9IHRydWU7XG4gICAgICAgIGlzT3ZlciA9IGdyb3VwLmJhc2UuaXNPdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncm91cC5iYXNlICYmIChncm91cC5iYXNlLnR5cGUgPT09IFwib3BcIiB8fCBncm91cC5iYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpKSB7XG4gICAgICBncm91cC5iYXNlLnBhcmVudElzU3VwU3ViID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBbYnVpbGRHcm91cChncm91cC5iYXNlLCBvcHRpb25zKV07XG5cbiAgICBpZiAoZ3JvdXAuc3ViKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGJ1aWxkR3JvdXAoZ3JvdXAuc3ViLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnN1cCkge1xuICAgICAgY2hpbGRyZW4ucHVzaChidWlsZEdyb3VwKGdyb3VwLnN1cCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZTtcblxuICAgIGlmIChpc0JyYWNlKSB7XG4gICAgICBub2RlVHlwZSA9IGlzT3ZlciA/IFwibW92ZXJcIiA6IFwibXVuZGVyXCI7XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3ViKSB7XG4gICAgICB2YXIgYmFzZSA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiICYmIGJhc2UubGltaXRzICYmIChvcHRpb25zLnN0eWxlID09PSBTdHlsZSQxLkRJU1BMQVkgfHwgYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcGVyYXRvcm5hbWVcIiAmJiBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoYmFzZS5saW1pdHMgfHwgb3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZKSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibW92ZXJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtc3VwXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZ3JvdXAuc3VwKSB7XG4gICAgICB2YXIgX2Jhc2UgPSBncm91cC5iYXNlO1xuXG4gICAgICBpZiAoX2Jhc2UgJiYgX2Jhc2UudHlwZSA9PT0gXCJvcFwiICYmIF9iYXNlLmxpbWl0cyAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YikpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZSAmJiBfYmFzZS50eXBlID09PSBcIm9wZXJhdG9ybmFtZVwiICYmIF9iYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAoX2Jhc2UubGltaXRzIHx8IG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkpIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm11bmRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZVR5cGUgPSBcIm1zdWJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9iYXNlMiA9IGdyb3VwLmJhc2U7XG5cbiAgICAgIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BcIiAmJiBfYmFzZTIubGltaXRzICYmIG9wdGlvbnMuc3R5bGUgPT09IFN0eWxlJDEuRElTUExBWSkge1xuICAgICAgICBub2RlVHlwZSA9IFwibXVuZGVyb3ZlclwiO1xuICAgICAgfSBlbHNlIGlmIChfYmFzZTIgJiYgX2Jhc2UyLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIgJiYgX2Jhc2UyLmFsd2F5c0hhbmRsZVN1cFN1YiAmJiAob3B0aW9ucy5zdHlsZSA9PT0gU3R5bGUkMS5ESVNQTEFZIHx8IF9iYXNlMi5saW1pdHMpKSB7XG4gICAgICAgIG5vZGVUeXBlID0gXCJtdW5kZXJvdmVyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlVHlwZSA9IFwibXN1YnN1cFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShub2RlVHlwZSwgY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJhdG9tXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWF0aHN5bShncm91cC50ZXh0LCBncm91cC5tb2RlLCBvcHRpb25zLCBbXCJtXCIgKyBncm91cC5mYW1pbHldKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1vXCIsIFttYWtlVGV4dChncm91cC50ZXh0LCBncm91cC5tb2RlKV0pO1xuXG4gICAgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJiaW5cIikge1xuICAgICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKTtcblxuICAgICAgaWYgKHZhcmlhbnQgPT09IFwiYm9sZC1pdGFsaWNcIikge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmFtaWx5ID09PSBcInB1bmN0XCIpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwic2VwYXJhdG9yXCIsIFwidHJ1ZVwiKTtcbiAgICB9IGVsc2UgaWYgKGdyb3VwLmZhbWlseSA9PT0gXCJvcGVuXCIgfHwgZ3JvdXAuZmFtaWx5ID09PSBcImNsb3NlXCIpIHtcbiAgICAgIC8vIERlbGltcyBidWlsdCBoZXJlIHNob3VsZCBub3Qgc3RyZXRjaCB2ZXJ0aWNhbGx5LlxuICAgICAgLy8gU2VlIGRlbGltc2l6aW5nLmpzIGZvciBzdHJldGNoeSBkZWxpbXMuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcInN0cmV0Y2h5XCIsIFwiZmFsc2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbi8vIFwibWF0aG9yZFwiIGFuZCBcInRleHRvcmRcIiBQYXJzZU5vZGVzIGNyZWF0ZWQgaW4gUGFyc2VyLmpzIGZyb20gc3ltYm9sIEdyb3VwcyBpblxuLy8gc3JjL3N5bWJvbHMuanMuXG52YXIgZGVmYXVsdFZhcmlhbnQgPSB7XG4gIFwibWlcIjogXCJpdGFsaWNcIixcbiAgXCJtblwiOiBcIm5vcm1hbFwiLFxuICBcIm10ZXh0XCI6IFwibm9ybWFsXCJcbn07XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJtYXRob3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJtYXRob3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBtYXRoTUxUcmVlLk1hdGhOb2RlKFwibWlcIiwgW21ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpXSk7XG4gICAgdmFyIHZhcmlhbnQgPSBnZXRWYXJpYW50KGdyb3VwLCBvcHRpb25zKSB8fCBcIml0YWxpY1wiO1xuXG4gICAgaWYgKHZhcmlhbnQgIT09IGRlZmF1bHRWYXJpYW50W25vZGUudHlwZV0pIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibWF0aHZhcmlhbnRcIiwgdmFyaWFudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5kZWZpbmVGdW5jdGlvbkJ1aWxkZXJzKHtcbiAgdHlwZTogXCJ0ZXh0b3JkXCIsXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYnVpbGRDb21tb24ubWFrZU9yZChncm91cCwgb3B0aW9ucywgXCJ0ZXh0b3JkXCIpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG1ha2VUZXh0KGdyb3VwLnRleHQsIGdyb3VwLm1vZGUsIG9wdGlvbnMpO1xuICAgIHZhciB2YXJpYW50ID0gZ2V0VmFyaWFudChncm91cCwgb3B0aW9ucykgfHwgXCJub3JtYWxcIjtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChncm91cC5tb2RlID09PSAndGV4dCcpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmICgvWzAtOV0vLnRlc3QoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1uXCIsIFt0ZXh0XSk7XG4gICAgfSBlbHNlIGlmIChncm91cC50ZXh0ID09PSBcIlxcXFxwcmltZVwiKSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbdGV4dF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtaVwiLCBbdGV4dF0pO1xuICAgIH1cblxuICAgIGlmICh2YXJpYW50ICE9PSBkZWZhdWx0VmFyaWFudFtub2RlLnR5cGVdKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm1hdGh2YXJpYW50XCIsIHZhcmlhbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbn0pO1xuXG52YXIgY3NzU3BhY2UgPSB7XG4gIFwiXFxcXG5vYnJlYWtcIjogXCJub2JyZWFrXCIsXG4gIFwiXFxcXGFsbG93YnJlYWtcIjogXCJhbGxvd2JyZWFrXCJcbn07IC8vIEEgbG9va3VwIHRhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3BhY2luZyBmdW5jdGlvbi9zeW1ib2wgc2hvdWxkIGJlXG4vLyB0cmVhdGVkIGxpa2UgYSByZWd1bGFyIHNwYWNlIGNoYXJhY3Rlci4gIElmIGEgc3ltYm9sIG9yIGNvbW1hbmQgaXMgYSBrZXlcbi8vIGluIHRoaXMgdGFibGUsIHRoZW4gaXQgc2hvdWxkIGJlIGEgcmVndWxhciBzcGFjZSBjaGFyYWN0ZXIuICBGdXJ0aGVybW9yZSxcbi8vIHRoZSBhc3NvY2lhdGVkIHZhbHVlIG1heSBoYXZlIGEgYGNsYXNzTmFtZWAgc3BlY2lmeWluZyBhbiBleHRyYSBDU1MgY2xhc3Ncbi8vIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBgc3BhbmAuXG5cbnZhciByZWd1bGFyU3BhY2UgPSB7XG4gIFwiIFwiOiB7fSxcbiAgXCJcXFxcIFwiOiB7fSxcbiAgXCJ+XCI6IHtcbiAgICBjbGFzc05hbWU6IFwibm9icmVha1wiXG4gIH0sXG4gIFwiXFxcXHNwYWNlXCI6IHt9LFxuICBcIlxcXFxub2JyZWFrc3BhY2VcIjoge1xuICAgIGNsYXNzTmFtZTogXCJub2JyZWFrXCJcbiAgfVxufTsgLy8gUGFyc2VOb2RlPFwic3BhY2luZ1wiPiBjcmVhdGVkIGluIFBhcnNlci5qcyBmcm9tIHRoZSBcInNwYWNpbmdcIiBzeW1ib2wgR3JvdXBzIGluXG4vLyBzcmMvc3ltYm9scy5qcy5cblxuZGVmaW5lRnVuY3Rpb25CdWlsZGVycyh7XG4gIHR5cGU6IFwic3BhY2luZ1wiLFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgaWYgKHJlZ3VsYXJTcGFjZS5oYXNPd25Qcm9wZXJ0eShncm91cC50ZXh0KSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZ3VsYXJTcGFjZVtncm91cC50ZXh0XS5jbGFzc05hbWUgfHwgXCJcIjsgLy8gU3BhY2VzIGFyZSBnZW5lcmF0ZWQgYnkgYWRkaW5nIGFuIGFjdHVhbCBzcGFjZS4gRWFjaCBvZiB0aGVzZVxuICAgICAgLy8gdGhpbmdzIGhhcyBhbiBlbnRyeSBpbiB0aGUgc3ltYm9scyB0YWJsZSwgc28gdGhlc2Ugd2lsbCBiZSB0dXJuZWRcbiAgICAgIC8vIGludG8gYXBwcm9wcmlhdGUgb3V0cHV0cy5cblxuICAgICAgaWYgKGdyb3VwLm1vZGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHZhciBvcmQgPSBidWlsZENvbW1vbi5tYWtlT3JkKGdyb3VwLCBvcHRpb25zLCBcInRleHRvcmRcIik7XG4gICAgICAgIG9yZC5jbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgcmV0dXJuIG9yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY2xhc3NOYW1lXSwgW2J1aWxkQ29tbW9uLm1hdGhzeW0oZ3JvdXAudGV4dCwgZ3JvdXAubW9kZSwgb3B0aW9ucyldLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBTcGFjZXMgYmFzZWQgb24ganVzdCBhIENTUyBjbGFzcy5cbiAgICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtc3BhY2VcIiwgY3NzU3BhY2VbZ3JvdXAudGV4dF1dLCBbXSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbm9kZTtcblxuICAgIGlmIChyZWd1bGFyU3BhY2UuaGFzT3duUHJvcGVydHkoZ3JvdXAudGV4dCkpIHtcbiAgICAgIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFtuZXcgbWF0aE1MVHJlZS5UZXh0Tm9kZShcIlxcdTAwYTBcIildKTtcbiAgICB9IGVsc2UgaWYgKGNzc1NwYWNlLmhhc093blByb3BlcnR5KGdyb3VwLnRleHQpKSB7XG4gICAgICAvLyBDU1MtYmFzZWQgTWF0aE1MIHNwYWNlcyAoXFxub2JyZWFrLCBcXGFsbG93YnJlYWspIGFyZSBpZ25vcmVkXG4gICAgICByZXR1cm4gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtc3BhY2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVW5rbm93biB0eXBlIG9mIHNwYWNlIFxcXCJcIiArIGdyb3VwLnRleHQgKyBcIlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbnZhciBwYWQgPSAoKSA9PiB7XG4gIHZhciBwYWROb2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdGRcIiwgW10pO1xuICBwYWROb2RlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiNTAlXCIpO1xuICByZXR1cm4gcGFkTm9kZTtcbn07XG5cbmRlZmluZUZ1bmN0aW9uQnVpbGRlcnMoe1xuICB0eXBlOiBcInRhZ1wiLFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGFibGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10YWJsZVwiLCBbbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdHJcIiwgW3BhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG9wdGlvbnMpXSksIHBhZCgpLCBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZFwiLCBbYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLnRhZywgb3B0aW9ucyldKV0pXSk7XG4gICAgdGFibGUuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIHJldHVybiB0YWJsZTsgLy8gVE9ETzogTGVmdC1hbGlnbmVkIHRhZ3MuXG4gICAgLy8gQ3VycmVudGx5LCB0aGUgZ3JvdXAgYW5kIG9wdGlvbnMgcGFzc2VkIGhlcmUgZG8gbm90IGNvbnRhaW5cbiAgICAvLyBlbm91Z2ggaW5mbyB0byBzZXQgdGFnIGFsaWdubWVudC4gYGxlcW5vYCBpcyBpbiBTZXR0aW5ncyBidXQgaXQgaXNcbiAgICAvLyBub3QgcGFzc2VkIHRvIE9wdGlvbnMuIE9uIHRoZSBIVE1MIHNpZGUsIGxlcW5vIGlzXG4gICAgLy8gc2V0IGJ5IGEgQ1NTIGNsYXNzIGFwcGxpZWQgaW4gYnVpbGRUcmVlLmpzLiBUaGF0IHdvdWxkIGhhdmUgd29ya2VkXG4gICAgLy8gaW4gTWF0aE1MIGlmIGJyb3dzZXJzIHN1cHBvcnRlZCA8bWxhYmVsZWR0cj4uIFNpbmNlIHRoZXkgZG9uJ3QsIHdlXG4gICAgLy8gbmVlZCB0byByZXdyaXRlIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gIH1cblxufSk7XG5cbnZhciB0ZXh0Rm9udEZhbWlsaWVzID0ge1xuICBcIlxcXFx0ZXh0XCI6IHVuZGVmaW5lZCxcbiAgXCJcXFxcdGV4dHJtXCI6IFwidGV4dHJtXCIsXG4gIFwiXFxcXHRleHRzZlwiOiBcInRleHRzZlwiLFxuICBcIlxcXFx0ZXh0dHRcIjogXCJ0ZXh0dHRcIixcbiAgXCJcXFxcdGV4dG5vcm1hbFwiOiBcInRleHRybVwiXG59O1xudmFyIHRleHRGb250V2VpZ2h0cyA9IHtcbiAgXCJcXFxcdGV4dGJmXCI6IFwidGV4dGJmXCIsXG4gIFwiXFxcXHRleHRtZFwiOiBcInRleHRtZFwiXG59O1xudmFyIHRleHRGb250U2hhcGVzID0ge1xuICBcIlxcXFx0ZXh0aXRcIjogXCJ0ZXh0aXRcIixcbiAgXCJcXFxcdGV4dHVwXCI6IFwidGV4dHVwXCJcbn07XG5cbnZhciBvcHRpb25zV2l0aEZvbnQgPSAoZ3JvdXAsIG9wdGlvbnMpID0+IHtcbiAgdmFyIGZvbnQgPSBncm91cC5mb250OyAvLyBDaGVja3MgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZm9udCBmYW1pbHkgb3IgYSBmb250IHN0eWxlLlxuXG4gIGlmICghZm9udCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9IGVsc2UgaWYgKHRleHRGb250RmFtaWxpZXNbZm9udF0pIHtcbiAgICByZXR1cm4gb3B0aW9ucy53aXRoVGV4dEZvbnRGYW1pbHkodGV4dEZvbnRGYW1pbGllc1tmb250XSk7XG4gIH0gZWxzZSBpZiAodGV4dEZvbnRXZWlnaHRzW2ZvbnRdKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250V2VpZ2h0KHRleHRGb250V2VpZ2h0c1tmb250XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2l0aFRleHRGb250U2hhcGUodGV4dEZvbnRTaGFwZXNbZm9udF0pO1xuICB9XG59O1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lczogWy8vIEZvbnQgZmFtaWxpZXNcbiAgXCJcXFxcdGV4dFwiLCBcIlxcXFx0ZXh0cm1cIiwgXCJcXFxcdGV4dHNmXCIsIFwiXFxcXHRleHR0dFwiLCBcIlxcXFx0ZXh0bm9ybWFsXCIsIC8vIEZvbnQgd2VpZ2h0c1xuICBcIlxcXFx0ZXh0YmZcIiwgXCJcXFxcdGV4dG1kXCIsIC8vIEZvbnQgU2hhcGVzXG4gIFwiXFxcXHRleHRpdFwiLCBcIlxcXFx0ZXh0dXBcIl0sXG4gIHByb3BzOiB7XG4gICAgbnVtQXJnczogMSxcbiAgICBhcmdUeXBlczogW1widGV4dFwiXSxcbiAgICBhbGxvd2VkSW5Bcmd1bWVudDogdHJ1ZSxcbiAgICBhbGxvd2VkSW5UZXh0OiB0cnVlXG4gIH0sXG5cbiAgaGFuZGxlcihfcmVmLCBhcmdzKSB7XG4gICAgdmFyIHtcbiAgICAgIHBhcnNlcixcbiAgICAgIGZ1bmNOYW1lXG4gICAgfSA9IF9yZWY7XG4gICAgdmFyIGJvZHkgPSBhcmdzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogb3JkYXJndW1lbnQoYm9keSksXG4gICAgICBmb250OiBmdW5jTmFtZVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnNXaXRoRm9udChncm91cCwgb3B0aW9ucyk7XG4gICAgdmFyIGlubmVyID0gYnVpbGRFeHByZXNzaW9uJDEoZ3JvdXAuYm9keSwgbmV3T3B0aW9ucywgdHJ1ZSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLCBpbm5lciwgbmV3T3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIHZhciBuZXdPcHRpb25zID0gb3B0aW9uc1dpdGhGb250KGdyb3VwLCBvcHRpb25zKTtcbiAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uUm93KGdyb3VwLmJvZHksIG5ld09wdGlvbnMpO1xuICB9XG5cbn0pO1xuXG5kZWZpbmVGdW5jdGlvbih7XG4gIHR5cGU6IFwidW5kZXJsaW5lXCIsXG4gIG5hbWVzOiBbXCJcXFxcdW5kZXJsaW5lXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDEsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bmRlcmxpbmVcIixcbiAgICAgIG1vZGU6IHBhcnNlci5tb2RlLFxuICAgICAgYm9keTogYXJnc1swXVxuICAgIH07XG4gIH0sXG5cbiAgaHRtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAvLyBVbmRlcmxpbmVzIGFyZSBoYW5kbGVkIGluIHRoZSBUZVhib29rIHBnIDQ0MywgUnVsZSAxMC5cbiAgICAvLyBCdWlsZCB0aGUgaW5uZXIgZ3JvdXAuXG4gICAgdmFyIGlubmVyR3JvdXAgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7IC8vIENyZWF0ZSB0aGUgbGluZSB0byBnbyBiZWxvdyB0aGUgYm9keVxuXG4gICAgdmFyIGxpbmUgPSBidWlsZENvbW1vbi5tYWtlTGluZVNwYW4oXCJ1bmRlcmxpbmUtbGluZVwiLCBvcHRpb25zKTsgLy8gR2VuZXJhdGUgdGhlIHZsaXN0LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuc1xuXG4gICAgdmFyIGRlZmF1bHRSdWxlVGhpY2tuZXNzID0gb3B0aW9ucy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzO1xuICAgIHZhciB2bGlzdCA9IGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwidG9wXCIsXG4gICAgICBwb3NpdGlvbkRhdGE6IGlubmVyR3JvdXAuaGVpZ2h0LFxuICAgICAgY2hpbGRyZW46IFt7XG4gICAgICAgIHR5cGU6IFwia2VyblwiLFxuICAgICAgICBzaXplOiBkZWZhdWx0UnVsZVRoaWNrbmVzc1xuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImVsZW1cIixcbiAgICAgICAgZWxlbTogbGluZVxuICAgICAgfSwge1xuICAgICAgICB0eXBlOiBcImtlcm5cIixcbiAgICAgICAgc2l6ZTogMyAqIGRlZmF1bHRSdWxlVGhpY2tuZXNzXG4gICAgICB9LCB7XG4gICAgICAgIHR5cGU6IFwiZWxlbVwiLFxuICAgICAgICBlbGVtOiBpbm5lckdyb3VwXG4gICAgICB9XVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBidWlsZENvbW1vbi5tYWtlU3BhbihbXCJtb3JkXCIsIFwidW5kZXJsaW5lXCJdLCBbdmxpc3RdLCBvcHRpb25zKTtcbiAgfSxcblxuICBtYXRobWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wZXJhdG9yID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtb1wiLCBbbmV3IG1hdGhNTFRyZWUuVGV4dE5vZGUoXCJcXHUyMDNlXCIpXSk7XG4gICAgb3BlcmF0b3Iuc2V0QXR0cmlidXRlKFwic3RyZXRjaHlcIiwgXCJ0cnVlXCIpO1xuICAgIHZhciBub2RlID0gbmV3IG1hdGhNTFRyZWUuTWF0aE5vZGUoXCJtdW5kZXJcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyksIG9wZXJhdG9yXSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhY2NlbnR1bmRlclwiLCBcInRydWVcIik7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxufSk7XG5cbmRlZmluZUZ1bmN0aW9uKHtcbiAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gIG5hbWVzOiBbXCJcXFxcdmNlbnRlclwiXSxcbiAgcHJvcHM6IHtcbiAgICBudW1BcmdzOiAxLFxuICAgIGFyZ1R5cGVzOiBbXCJvcmlnaW5hbFwiXSxcbiAgICAvLyBJbiBMYVRlWCwgXFx2Y2VudGVyIGNhbiBhY3Qgb25seSBvbiBhIGJveC5cbiAgICBhbGxvd2VkSW5UZXh0OiBmYWxzZVxuICB9LFxuXG4gIGhhbmRsZXIoX3JlZiwgYXJncykge1xuICAgIHZhciB7XG4gICAgICBwYXJzZXJcbiAgICB9ID0gX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ2Y2VudGVyXCIsXG4gICAgICBtb2RlOiBwYXJzZXIubW9kZSxcbiAgICAgIGJvZHk6IGFyZ3NbMF1cbiAgICB9O1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIGJvZHkgPSBidWlsZEdyb3VwJDEoZ3JvdXAuYm9keSwgb3B0aW9ucyk7XG4gICAgdmFyIGF4aXNIZWlnaHQgPSBvcHRpb25zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtcbiAgICB2YXIgZHkgPSAwLjUgKiAoYm9keS5oZWlnaHQgLSBheGlzSGVpZ2h0IC0gKGJvZHkuZGVwdGggKyBheGlzSGVpZ2h0KSk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VWTGlzdCh7XG4gICAgICBwb3NpdGlvblR5cGU6IFwic2hpZnRcIixcbiAgICAgIHBvc2l0aW9uRGF0YTogZHksXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgdHlwZTogXCJlbGVtXCIsXG4gICAgICAgIGVsZW06IGJvZHlcbiAgICAgIH1dXG4gICAgfSwgb3B0aW9ucyk7XG4gIH0sXG5cbiAgbWF0aG1sQnVpbGRlcihncm91cCwgb3B0aW9ucykge1xuICAgIC8vIFRoZXJlIGlzIG5vIHdheSB0byBkbyB0aGlzIGluIE1hdGhNTC5cbiAgICAvLyBXcml0ZSBhIGNsYXNzIGFzIGEgYnJlYWRjcnVtYiBpbiBjYXNlIHNvbWUgcG9zdC1wcm9jZXNzb3Igd2FudHNcbiAgICAvLyB0byBwZXJmb3JtIGEgdmNlbnRlciBhZGp1c3RtZW50LlxuICAgIHJldHVybiBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm1wYWRkZWRcIiwgW2J1aWxkR3JvdXAoZ3JvdXAuYm9keSwgb3B0aW9ucyldLCBbXCJ2Y2VudGVyXCJdKTtcbiAgfVxuXG59KTtcblxuZGVmaW5lRnVuY3Rpb24oe1xuICB0eXBlOiBcInZlcmJcIixcbiAgbmFtZXM6IFtcIlxcXFx2ZXJiXCJdLFxuICBwcm9wczoge1xuICAgIG51bUFyZ3M6IDAsXG4gICAgYWxsb3dlZEluVGV4dDogdHJ1ZVxuICB9LFxuXG4gIGhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncykge1xuICAgIC8vIFxcdmVyYiBhbmQgXFx2ZXJiKiBhcmUgZGVhbHQgd2l0aCBkaXJlY3RseSBpbiBQYXJzZXIuanMuXG4gICAgLy8gSWYgd2UgZW5kIHVwIGhlcmUsIGl0J3MgYmVjYXVzZSBvZiBhIGZhaWx1cmUgdG8gbWF0Y2ggdGhlIHR3byBkZWxpbWl0ZXJzXG4gICAgLy8gaW4gdGhlIHJlZ2V4IGluIExleGVyLmpzLiAgTGFUZVggcmFpc2VzIHRoZSBmb2xsb3dpbmcgZXJyb3Igd2hlbiBcXHZlcmIgaXNcbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBsaW5lIChvciBmaWxlKS5cbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyXCIpO1xuICB9LFxuXG4gIGh0bWxCdWlsZGVyKGdyb3VwLCBvcHRpb25zKSB7XG4gICAgdmFyIHRleHQgPSBtYWtlVmVyYihncm91cCk7XG4gICAgdmFyIGJvZHkgPSBbXTsgLy8gXFx2ZXJiIGVudGVycyB0ZXh0IG1vZGUgYW5kIHRoZXJlZm9yZSBpcyBzaXplZCBsaWtlIFxcdGV4dHN0eWxlXG5cbiAgICB2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMuaGF2aW5nU3R5bGUob3B0aW9ucy5zdHlsZS50ZXh0KCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHRleHRbaV07XG5cbiAgICAgIGlmIChjID09PSAnficpIHtcbiAgICAgICAgYyA9ICdcXFxcdGV4dGFzY2lpdGlsZGUnO1xuICAgICAgfVxuXG4gICAgICBib2R5LnB1c2goYnVpbGRDb21tb24ubWFrZVN5bWJvbChjLCBcIlR5cGV3cml0ZXItUmVndWxhclwiLCBncm91cC5tb2RlLCBuZXdPcHRpb25zLCBbXCJtb3JkXCIsIFwidGV4dHR0XCJdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcIm1vcmRcIiwgXCJ0ZXh0XCJdLmNvbmNhdChuZXdPcHRpb25zLnNpemluZ0NsYXNzZXMob3B0aW9ucykpLCBidWlsZENvbW1vbi50cnlDb21iaW5lQ2hhcnMoYm9keSksIG5ld09wdGlvbnMpO1xuICB9LFxuXG4gIG1hdGhtbEJ1aWxkZXIoZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGV4dCA9IG5ldyBtYXRoTUxUcmVlLlRleHROb2RlKG1ha2VWZXJiKGdyb3VwKSk7XG4gICAgdmFyIG5vZGUgPSBuZXcgbWF0aE1MVHJlZS5NYXRoTm9kZShcIm10ZXh0XCIsIFt0ZXh0XSk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJtYXRodmFyaWFudFwiLCBcIm1vbm9zcGFjZVwiKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG59KTtcbi8qKlxuICogQ29udmVydHMgdmVyYiBncm91cCBpbnRvIGJvZHkgc3RyaW5nLlxuICpcbiAqIFxcdmVyYiogcmVwbGFjZXMgZWFjaCBzcGFjZSB3aXRoIGFuIG9wZW4gYm94IFxcdTI0MjNcbiAqIFxcdmVyYiByZXBsYWNlcyBlYWNoIHNwYWNlIHdpdGggYSBuby1icmVhayBzcGFjZSBcXHhBMFxuICovXG5cbnZhciBtYWtlVmVyYiA9IGdyb3VwID0+IGdyb3VwLmJvZHkucmVwbGFjZSgvIC9nLCBncm91cC5zdGFyID8gJ1xcdTI0MjMnIDogJ1xceEEwJyk7XG5cbi8qKiBJbmNsdWRlIHRoaXMgdG8gZW5zdXJlIHRoYXQgYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gKi9cbnZhciBmdW5jdGlvbnMgPSBfZnVuY3Rpb25zO1xuXG4vKipcbiAqIFRoZSBMZXhlciBjbGFzcyBoYW5kbGVzIHRva2VuaXppbmcgdGhlIGlucHV0IGluIHZhcmlvdXMgd2F5cy4gU2luY2Ugb3VyXG4gKiBwYXJzZXIgZXhwZWN0cyB1cyB0byBiZSBhYmxlIHRvIGJhY2t0cmFjaywgdGhlIGxleGVyIGFsbG93cyBsZXhpbmcgZnJvbSBhbnlcbiAqIGdpdmVuIHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIEl0cyBtYWluIGV4cG9zZWQgZnVuY3Rpb24gaXMgdGhlIGBsZXhgIGZ1bmN0aW9uLCB3aGljaCB0YWtlcyBhIHBvc2l0aW9uIHRvXG4gKiBsZXggZnJvbSBhbmQgYSB0eXBlIG9mIHRva2VuIHRvIGxleC4gSXQgZGVmZXJzIHRvIHRoZSBhcHByb3ByaWF0ZSBgX2lubmVyTGV4YFxuICogZnVuY3Rpb24uXG4gKlxuICogVGhlIHZhcmlvdXMgYF9pbm5lckxleGAgZnVuY3Rpb25zIHBlcmZvcm0gdGhlIGFjdHVhbCBsZXhpbmcgb2YgZGlmZmVyZW50XG4gKiBraW5kcy5cbiAqL1xuXG4vKiBUaGUgZm9sbG93aW5nIHRva2VuUmVnZXhcbiAqIC0gbWF0Y2hlcyB0eXBpY2FsIHdoaXRlc3BhY2UgKGJ1dCBub3QgTkJTUCBldGMuKSB1c2luZyBpdHMgZmlyc3QgZ3JvdXBcbiAqIC0gZG9lcyBub3QgbWF0Y2ggYW55IGNvbnRyb2wgY2hhcmFjdGVyIFxceDAwLVxceDFmIGV4Y2VwdCB3aGl0ZXNwYWNlXG4gKiAtIGRvZXMgbm90IG1hdGNoIGEgYmFyZSBiYWNrc2xhc2hcbiAqIC0gbWF0Y2hlcyBhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCB0aG9zZSBqdXN0IG1lbnRpb25lZFxuICogLSBkb2VzIG5vdCBtYXRjaCB0aGUgQk1QIHByaXZhdGUgdXNlIGFyZWEgXFx1RTAwMC1cXHVGOEZGXG4gKiAtIGRvZXMgbm90IG1hdGNoIGJhcmUgc3Vycm9nYXRlIGNvZGUgdW5pdHNcbiAqIC0gbWF0Y2hlcyBhbnkgQk1QIGNoYXJhY3RlciBleGNlcHQgZm9yIHRob3NlIGp1c3QgZGVzY3JpYmVkXG4gKiAtIG1hdGNoZXMgYW55IHZhbGlkIFVuaWNvZGUgc3Vycm9nYXRlIHBhaXJcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAqIC0gbWF0Y2hlcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsZXR0ZXJzIHRoZW4gd2hpdGVzcGFjZVxuICogLSBtYXRjaGVzIGEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueSBCTVAgY2hhcmFjdGVyXG4gKiBDYXB0dXJpbmcgZ3JvdXBzOlxuICogICBbMV0gcmVndWxhciB3aGl0ZXNwYWNlXG4gKiAgIFsyXSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgd2hpdGVzcGFjZVxuICogICBbM10gYW55dGhpbmcgZWxzZSwgd2hpY2ggbWF5IGluY2x1ZGU6XG4gKiAgICAgWzRdIGxlZnQgY2hhcmFjdGVyIG9mIFxcdmVyYipcbiAqICAgICBbNV0gbGVmdCBjaGFyYWN0ZXIgb2YgXFx2ZXJiXG4gKiAgICAgWzZdIGJhY2tzbGFzaCBmb2xsb3dlZCBieSB3b3JkLCBleGNsdWRpbmcgYW55IHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAqIEp1c3QgYmVjYXVzZSB0aGUgTGV4ZXIgbWF0Y2hlcyBzb21ldGhpbmcgZG9lc24ndCBtZWFuIGl0J3MgdmFsaWQgaW5wdXQ6XG4gKiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBmdW5jdGlvbiBvciBzeW1ib2wgZGVmaW5pdGlvbiwgdGhlIFBhcnNlciB3aWxsXG4gKiBzdGlsbCByZWplY3QgdGhlIGlucHV0LlxuICovXG52YXIgc3BhY2VSZWdleFN0cmluZyA9IFwiWyBcXHJcXG5cXHRdXCI7XG52YXIgY29udHJvbFdvcmRSZWdleFN0cmluZyA9IFwiXFxcXFxcXFxbYS16QS1aQF0rXCI7XG52YXIgY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nID0gXCJcXFxcXFxcXFteXFx1RDgwMC1cXHVERkZGXVwiO1xudmFyIGNvbnRyb2xXb3JkV2hpdGVzcGFjZVJlZ2V4U3RyaW5nID0gXCIoXCIgKyBjb250cm9sV29yZFJlZ2V4U3RyaW5nICsgXCIpXCIgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIqXCI7XG52YXIgY29udHJvbFNwYWNlUmVnZXhTdHJpbmcgPSBcIlxcXFxcXFxcKFxcbnxbIFxcclxcdF0rXFxuPylbIFxcclxcdF0qXCI7XG52YXIgY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nID0gXCJbXFx1MDMwMC1cXHUwMzZmXVwiO1xudmFyIGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleCA9IG5ldyBSZWdFeHAoY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIrJFwiKTtcbnZhciB0b2tlblJlZ2V4U3RyaW5nID0gXCIoXCIgKyBzcGFjZVJlZ2V4U3RyaW5nICsgXCIrKXxcIiArICggLy8gd2hpdGVzcGFjZVxuY29udHJvbFNwYWNlUmVnZXhTdHJpbmcgKyBcInxcIikgKyAvLyBcXHdoaXRlc3BhY2VcblwiKFshLVxcXFxbXFxcXF0tXFx1MjAyN1xcdTIwMkEtXFx1RDdGRlxcdUY5MDAtXFx1RkZGRl1cIiArICggLy8gc2luZ2xlIGNvZGVwb2ludFxuY29tYmluaW5nRGlhY3JpdGljYWxNYXJrU3RyaW5nICsgXCIqXCIpICsgLy8gLi4ucGx1cyBhY2NlbnRzXG5cInxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdXCIgKyAoIC8vIHN1cnJvZ2F0ZSBwYWlyXG5jb21iaW5pbmdEaWFjcml0aWNhbE1hcmtTdHJpbmcgKyBcIipcIikgKyAvLyAuLi5wbHVzIGFjY2VudHNcblwifFxcXFxcXFxcdmVyYlxcXFwqKFteXSkuKj9cXFxcNFwiICsgLy8gXFx2ZXJiKlxuXCJ8XFxcXFxcXFx2ZXJiKFteKmEtekEtWl0pLio/XFxcXDVcIiArICggLy8gXFx2ZXJiIHVuc3RhcnJlZFxuXCJ8XCIgKyBjb250cm9sV29yZFdoaXRlc3BhY2VSZWdleFN0cmluZykgKyAoIC8vIFxcbWFjcm9OYW1lICsgc3BhY2VzXG5cInxcIiArIGNvbnRyb2xTeW1ib2xSZWdleFN0cmluZyArIFwiKVwiKTsgLy8gXFxcXCwgXFwnLCBldGMuXG5cbi8qKiBNYWluIExleGVyIGNsYXNzICovXG5cbmNsYXNzIExleGVyIHtcbiAgLy8gQ2F0ZWdvcnkgY29kZXMuIFRoZSBsZXhlciBvbmx5IHN1cHBvcnRzIGNvbW1lbnQgY2hhcmFjdGVycyAoMTQpIGZvciBub3cuXG4gIC8vIE1hY3JvRXhwYW5kZXIgYWRkaXRpb25hbGx5IGRpc3Rpbmd1aXNoZXMgYWN0aXZlICgxMykuXG4gIGNvbnN0cnVjdG9yKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMuaW5wdXQgPSB2b2lkIDA7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHZvaWQgMDtcbiAgICB0aGlzLnRva2VuUmVnZXggPSB2b2lkIDA7XG4gICAgdGhpcy5jYXRjb2RlcyA9IHZvaWQgMDtcbiAgICAvLyBTZXBhcmF0ZSBhY2NlbnRzIGZyb20gY2hhcmFjdGVyc1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy50b2tlblJlZ2V4ID0gbmV3IFJlZ0V4cCh0b2tlblJlZ2V4U3RyaW5nLCAnZycpO1xuICAgIHRoaXMuY2F0Y29kZXMgPSB7XG4gICAgICBcIiVcIjogMTQsXG4gICAgICAvLyBjb21tZW50IGNoYXJhY3RlclxuICAgICAgXCJ+XCI6IDEzIC8vIGFjdGl2ZSBjaGFyYWN0ZXJcblxuICAgIH07XG4gIH1cblxuICBzZXRDYXRjb2RlKGNoYXIsIGNvZGUpIHtcbiAgICB0aGlzLmNhdGNvZGVzW2NoYXJdID0gY29kZTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBsZXhlcyBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG5cblxuICBsZXgoKSB7XG4gICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICB2YXIgcG9zID0gdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtcblxuICAgIGlmIChwb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIkVPRlwiLCBuZXcgU291cmNlTG9jYXRpb24odGhpcywgcG9zLCBwb3MpKTtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2ggPSB0aGlzLnRva2VuUmVnZXguZXhlYyhpbnB1dCk7XG5cbiAgICBpZiAobWF0Y2ggPT09IG51bGwgfHwgbWF0Y2guaW5kZXggIT09IHBvcykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJ1wiICsgaW5wdXRbcG9zXSArIFwiJ1wiLCBuZXcgVG9rZW4oaW5wdXRbcG9zXSwgbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHBvcywgcG9zICsgMSkpKTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dCA9IG1hdGNoWzZdIHx8IG1hdGNoWzNdIHx8IChtYXRjaFsyXSA/IFwiXFxcXCBcIiA6IFwiIFwiKTtcblxuICAgIGlmICh0aGlzLmNhdGNvZGVzW3RleHRdID09PSAxNCkge1xuICAgICAgLy8gY29tbWVudCBjaGFyYWN0ZXJcbiAgICAgIHZhciBubEluZGV4ID0gaW5wdXQuaW5kZXhPZignXFxuJywgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7XG5cbiAgICAgIGlmIChubEluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4ID0gaW5wdXQubGVuZ3RoOyAvLyBFT0ZcblxuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcImNvbW1lbnRBdEVuZFwiLCBcIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgXCIgKyBcImZhaWwgYmVjYXVzZSBvZiBjb21tZW50aW5nIHRoZSBlbmQgb2YgbWF0aCBtb2RlIChlLmcuICQpXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCA9IG5sSW5kZXggKyAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRva2VuKHRleHQsIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBwb3MsIHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKTtcbiAgfVxuXG59XG5cbi8qKlxuICogQSBgTmFtZXNwYWNlYCByZWZlcnMgdG8gYSBzcGFjZSBvZiBuYW1lYWJsZSB0aGluZ3MgbGlrZSBtYWNyb3Mgb3IgbGVuZ3RocyxcbiAqIHdoaWNoIGNhbiBiZSBgc2V0YCBlaXRoZXIgZ2xvYmFsbHkgb3IgbG9jYWwgdG8gYSBuZXN0ZWQgZ3JvdXAsIHVzaW5nIGFuXG4gKiB1bmRvIHN0YWNrIHNpbWlsYXIgdG8gaG93IFRlWCBpbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb25hbGl0eS5cbiAqIFBlcmZvcm1hbmNlLXdpc2UsIGBnZXRgIGFuZCBsb2NhbCBgc2V0YCB0YWtlIGNvbnN0YW50IHRpbWUsIHdoaWxlIGdsb2JhbFxuICogYHNldGAgdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIGRlcHRoIG9mIGdyb3VwIG5lc3RpbmcuXG4gKi9cbmNsYXNzIE5hbWVzcGFjZSB7XG4gIC8qKlxuICAgKiBCb3RoIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gb2JqZWN0IG9mXG4gICAqIGJ1aWx0LWluIG1hcHBpbmdzIHdoaWNoIG5ldmVyIGNoYW5nZS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gICAqIG9mIGluaXRpYWwgKGdsb2JhbC1sZXZlbCkgbWFwcGluZ3MsIHdoaWNoIHdpbGwgY29uc3RhbnRseSBjaGFuZ2VcbiAgICogYWNjb3JkaW5nIHRvIGFueSBnbG9iYWwvdG9wLWxldmVsIGBzZXRgcyBkb25lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYnVpbHRpbnMsIGdsb2JhbE1hY3Jvcykge1xuICAgIGlmIChidWlsdGlucyA9PT0gdm9pZCAwKSB7XG4gICAgICBidWlsdGlucyA9IHt9O1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxNYWNyb3MgPT09IHZvaWQgMCkge1xuICAgICAgZ2xvYmFsTWFjcm9zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50ID0gdm9pZCAwO1xuICAgIHRoaXMuYnVpbHRpbnMgPSB2b2lkIDA7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gdm9pZCAwO1xuICAgIHRoaXMuY3VycmVudCA9IGdsb2JhbE1hY3JvcztcbiAgICB0aGlzLmJ1aWx0aW5zID0gYnVpbHRpbnM7XG4gICAgdGhpcy51bmRlZlN0YWNrID0gW107XG4gIH1cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IG5lc3RlZCBncm91cCwgYWZmZWN0aW5nIGZ1dHVyZSBsb2NhbCBgc2V0YHMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLnVuZGVmU3RhY2sucHVzaCh7fSk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IG5lc3RlZCBncm91cCwgcmVzdG9yaW5nIHZhbHVlcyBiZWZvcmUgdGhlIGdyb3VwIGJlZ2FuLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIGlmICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IFwiICsgXCJ0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnXCIpO1xuICAgIH1cblxuICAgIHZhciB1bmRlZnMgPSB0aGlzLnVuZGVmU3RhY2sucG9wKCk7XG5cbiAgICBmb3IgKHZhciB1bmRlZiBpbiB1bmRlZnMpIHtcbiAgICAgIGlmICh1bmRlZnMuaGFzT3duUHJvcGVydHkodW5kZWYpKSB7XG4gICAgICAgIGlmICh1bmRlZnNbdW5kZWZdID09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50W3VuZGVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRbdW5kZWZdID0gdW5kZWZzW3VuZGVmXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRW5kcyBhbGwgY3VycmVudGx5IG5lc3RlZCBncm91cHMgKGlmIGFueSksIHJlc3RvcmluZyB2YWx1ZXMgYmVmb3JlIHRoZVxuICAgKiBncm91cHMgYmVnYW4uICBVc2VmdWwgaW4gY2FzZSBvZiBhbiBlcnJvciBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcuXG4gICAqL1xuXG5cbiAgZW5kR3JvdXBzKCkge1xuICAgIHdoaWxlICh0aGlzLnVuZGVmU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lbmRHcm91cCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGV0ZWN0IHdoZXRoZXIgYG5hbWVgIGhhcyBhIGRlZmluaXRpb24uICBFcXVpdmFsZW50IHRvXG4gICAqIGBnZXQobmFtZSkgIT0gbnVsbGAuXG4gICAqL1xuXG5cbiAgaGFzKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KG5hbWUpIHx8IHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG5hbWUsIG9yIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIHZhbHVlLlxuICAgKlxuICAgKiBOb3RlOiBEbyBub3QgdXNlIGBpZiAobmFtZXNwYWNlLmdldCguLi4pKWAgdG8gZGV0ZWN0IHdoZXRoZXIgYSBtYWNyb1xuICAgKiBpcyBkZWZpbmVkLCBhcyB0aGUgZGVmaW5pdGlvbiBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZyB3aGljaCBldmFsdWF0ZXNcbiAgICogdG8gYGZhbHNlYCBpbiBKYXZhU2NyaXB0LiAgVXNlIGBpZiAobmFtZXNwYWNlLmdldCguLi4pICE9IG51bGwpYCBvclxuICAgKiBgaWYgKG5hbWVzcGFjZS5oYXMoLi4uKSlgLlxuICAgKi9cblxuXG4gIGdldChuYW1lKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbHRpbnNbbmFtZV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBuYW1lLCBhbmQgb3B0aW9uYWxseSBzZXQgaXQgZ2xvYmFsbHkgdG9vLlxuICAgKiBMb2NhbCBzZXQoKSBzZXRzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCAod2hlbiBhcHByb3ByaWF0ZSkgYWRkcyBhbiB1bmRvXG4gICAqIG9wZXJhdGlvbiB0byB0aGUgdW5kbyBzdGFjay4gIEdsb2JhbCBzZXQoKSBtYXkgY2hhbmdlIHRoZSB1bmRvXG4gICAqIG9wZXJhdGlvbiBhdCBldmVyeSBsZXZlbCwgc28gdGFrZXMgdGltZSBsaW5lYXIgaW4gdGhlaXIgbnVtYmVyLlxuICAgKiBBIHZhbHVlIG9mIHVuZGVmaW5lZCBtZWFucyB0byBkZWxldGUgZXhpc3RpbmcgZGVmaW5pdGlvbnMuXG4gICAqL1xuXG5cbiAgc2V0KG5hbWUsIHZhbHVlLCBnbG9iYWwpIHtcbiAgICBpZiAoZ2xvYmFsID09PSB2b2lkIDApIHtcbiAgICAgIGdsb2JhbCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChnbG9iYWwpIHtcbiAgICAgIC8vIEdsb2JhbCBzZXQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGluIGFsbCBncm91cHMuICBTaW11bGF0ZSB0aGlzXG4gICAgICAvLyBieSBkZXN0cm95aW5nIGFueSB1bmRvcyBjdXJyZW50bHkgc2NoZWR1bGVkIGZvciB0aGlzIG5hbWUsXG4gICAgICAvLyBhbmQgYWRkaW5nIGFuIHVuZG8gd2l0aCB0aGUgKm5ldyogdmFsdWUgKGluIGNhc2UgaXQgbGF0ZXIgZ2V0c1xuICAgICAgLy8gbG9jYWxseSByZXNldCB3aXRoaW4gdGhpcyBlbnZpcm9ubWVudCkuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5kZWZTdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW25hbWVdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy51bmRlZlN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGggLSAxXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVbmRvIHRoaXMgc2V0IGF0IGVuZCBvZiB0aGlzIGdyb3VwIChwb3NzaWJseSB0byBgdW5kZWZpbmVkYCksXG4gICAgICAvLyB1bmxlc3MgYW4gdW5kbyBpcyBhbHJlYWR5IGluIHBsYWNlLCBpbiB3aGljaCBjYXNlIHRoYXQgb2xkZXJcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBjb3JyZWN0IG9uZS5cbiAgICAgIHZhciB0b3AgPSB0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAodG9wICYmICF0b3AuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdG9wW25hbWVdID0gdGhpcy5jdXJyZW50W25hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWxldGUgdGhpcy5jdXJyZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxufVxuXG4vKipcbiAqIFByZWRlZmluZWQgbWFjcm9zIGZvciBLYVRlWC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHNvbWUgY29tbWFuZHMgaW4gdGVybXMgb2Ygb3RoZXJzLlxuICovXG52YXIgbWFjcm9zID0gX21hY3Jvcztcbi8vIG1hY3JvIHRvb2xzXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5vZXhwYW5kXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRoZSBleHBhbnNpb24gaXMgdGhlIHRva2VuIGl0c2VsZjsgYnV0IHRoYXQgdG9rZW4gaXMgaW50ZXJwcmV0ZWRcbiAgLy8gYXMgaWYgaXRzIG1lYW5pbmcgd2VyZSDigJhcXHJlbGF44oCZIGlmIGl0IGlzIGEgY29udHJvbCBzZXF1ZW5jZSB0aGF0XG4gIC8vIHdvdWxkIG9yZGluYXJpbHkgYmUgZXhwYW5kZWQgYnkgVGVY4oCZcyBleHBhbnNpb24gcnVsZXMuXG4gIHZhciB0ID0gY29udGV4dC5wb3BUb2tlbigpO1xuXG4gIGlmIChjb250ZXh0LmlzRXhwYW5kYWJsZSh0LnRleHQpKSB7XG4gICAgdC5ub2V4cGFuZCA9IHRydWU7XG4gICAgdC50cmVhdEFzUmVsYXggPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IFt0XSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXGV4cGFuZGFmdGVyXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIC8vIFRlWCBmaXJzdCByZWFkcyB0aGUgdG9rZW4gdGhhdCBjb21lcyBpbW1lZGlhdGVseSBhZnRlciBcXGV4cGFuZGFmdGVyLFxuICAvLyB3aXRob3V0IGV4cGFuZGluZyBpdDsgbGV04oCZcyBjYWxsIHRoaXMgdG9rZW4gdC4gVGhlbiBUZVggcmVhZHMgdGhlXG4gIC8vIHRva2VuIHRoYXQgY29tZXMgYWZ0ZXIgdCAoYW5kIHBvc3NpYmx5IG1vcmUgdG9rZW5zLCBpZiB0aGF0IHRva2VuXG4gIC8vIGhhcyBhbiBhcmd1bWVudCksIHJlcGxhY2luZyBpdCBieSBpdHMgZXhwYW5zaW9uLiBGaW5hbGx5IFRlWCBwdXRzXG4gIC8vIHQgYmFjayBpbiBmcm9udCBvZiB0aGF0IGV4cGFuc2lvbi5cbiAgdmFyIHQgPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIGNvbnRleHQuZXhwYW5kT25jZSh0cnVlKTsgLy8gZXhwYW5kIG9ubHkgYW4gZXhwYW5kYWJsZSB0b2tlblxuXG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBbdF0sXG4gICAgbnVtQXJnczogMFxuICB9O1xufSk7IC8vIExhVGVYJ3MgXFxAZmlyc3RvZnR3b3sjMX17IzJ9IGV4cGFuZHMgdG8gIzEsIHNraXBwaW5nICMyXG4vLyBUZVggc291cmNlOiBcXGxvbmdcXGRlZlxcQGZpcnN0b2Z0d28jMSMyeyMxfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAZmlyc3RvZnR3b1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMik7XG4gIHJldHVybiB7XG4gICAgdG9rZW5zOiBhcmdzWzBdLFxuICAgIG51bUFyZ3M6IDBcbiAgfTtcbn0pOyAvLyBMYVRlWCdzIFxcQHNlY29uZG9mdHdveyMxfXsjMn0gZXhwYW5kcyB0byAjMiwgc2tpcHBpbmcgIzFcbi8vIFRlWCBzb3VyY2U6IFxcbG9uZ1xcZGVmXFxAc2Vjb25kb2Z0d28jMSMyeyMyfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAc2Vjb25kb2Z0d29cIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIGFyZ3MgPSBjb250ZXh0LmNvbnN1bWVBcmdzKDIpO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogYXJnc1sxXSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59KTsgLy8gTGFUZVgncyBcXEBpZm5leHRjaGFyeyMxfXsjMn17IzN9IGxvb2tzIGFoZWFkIHRvIHRoZSBuZXh0ICh1bmV4cGFuZGVkKVxuLy8gc3ltYm9sIHRoYXQgaXNuJ3QgYSBzcGFjZSwgY29uc3VtaW5nIGFueSBzcGFjZXMgYnV0IG5vdCBjb25zdW1pbmcgdGhlXG4vLyBmaXJzdCBub25zcGFjZSBjaGFyYWN0ZXIuICBJZiB0aGF0IG5vbnNwYWNlIGNoYXJhY3RlciBtYXRjaGVzICMxLCB0aGVuXG4vLyB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMjsgb3RoZXJ3aXNlLCBpdCBleHBhbmRzIHRvICMzLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZuZXh0Y2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgYXJncyA9IGNvbnRleHQuY29uc3VtZUFyZ3MoMyk7IC8vIHN5bWJvbCwgaWYsIGVsc2VcblxuICBjb250ZXh0LmNvbnN1bWVTcGFjZXMoKTtcbiAgdmFyIG5leHRUb2tlbiA9IGNvbnRleHQuZnV0dXJlKCk7XG5cbiAgaWYgKGFyZ3NbMF0ubGVuZ3RoID09PSAxICYmIGFyZ3NbMF1bMF0udGV4dCA9PT0gbmV4dFRva2VuLnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzFdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogYXJnc1syXSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9XG59KTsgLy8gTGFUZVgncyBcXEBpZnN0YXJ7IzF9eyMyfSBsb29rcyBhaGVhZCB0byB0aGUgbmV4dCAodW5leHBhbmRlZCkgc3ltYm9sLlxuLy8gSWYgaXQgaXMgYCpgLCB0aGVuIGl0IGNvbnN1bWVzIHRoZSBzeW1ib2wsIGFuZCB0aGUgbWFjcm8gZXhwYW5kcyB0byAjMTtcbi8vIG90aGVyd2lzZSwgdGhlIG1hY3JvIGV4cGFuZHMgdG8gIzIgKHdpdGhvdXQgY29uc3VtaW5nIHRoZSBzeW1ib2wpLlxuLy8gVGVYIHNvdXJjZTogXFxkZWZcXEBpZnN0YXIjMXtcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxAaWZzdGFyXCIsIFwiXFxcXEBpZm5leHRjaGFyICp7XFxcXEBmaXJzdG9mdHdveyMxfX1cIik7IC8vIExhVGVYJ3MgXFxUZXh0T3JNYXRoeyMxfXsjMn0gZXhwYW5kcyB0byAjMSBpbiB0ZXh0IG1vZGUsICMyIGluIG1hdGggbW9kZVxuXG5kZWZpbmVNYWNybyhcIlxcXFxUZXh0T3JNYXRoXCIsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHZhciBhcmdzID0gY29udGV4dC5jb25zdW1lQXJncygyKTtcblxuICBpZiAoY29udGV4dC5tb2RlID09PSAndGV4dCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zOiBhcmdzWzBdLFxuICAgICAgbnVtQXJnczogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuczogYXJnc1sxXSxcbiAgICAgIG51bUFyZ3M6IDBcbiAgICB9O1xuICB9XG59KTsgLy8gTG9va3VwIHRhYmxlIGZvciBwYXJzaW5nIG51bWJlcnMgaW4gYmFzZSA4IHRocm91Z2ggMTZcblxudmFyIGRpZ2l0VG9OdW1iZXIgPSB7XG4gIFwiMFwiOiAwLFxuICBcIjFcIjogMSxcbiAgXCIyXCI6IDIsXG4gIFwiM1wiOiAzLFxuICBcIjRcIjogNCxcbiAgXCI1XCI6IDUsXG4gIFwiNlwiOiA2LFxuICBcIjdcIjogNyxcbiAgXCI4XCI6IDgsXG4gIFwiOVwiOiA5LFxuICBcImFcIjogMTAsXG4gIFwiQVwiOiAxMCxcbiAgXCJiXCI6IDExLFxuICBcIkJcIjogMTEsXG4gIFwiY1wiOiAxMixcbiAgXCJDXCI6IDEyLFxuICBcImRcIjogMTMsXG4gIFwiRFwiOiAxMyxcbiAgXCJlXCI6IDE0LFxuICBcIkVcIjogMTQsXG4gIFwiZlwiOiAxNSxcbiAgXCJGXCI6IDE1XG59OyAvLyBUZVggXFxjaGFyIG1ha2VzIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgKGNhdGNvZGUgMTIpIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybXM6XG4vLyAoc2VlIFRoZSBUZVhCb29rLCBwLiA0Mylcbi8vICAgXFxjaGFyMTIzICAtLSBkZWNpbWFsXG4vLyAgIFxcY2hhcicxMjMgLS0gb2N0YWxcbi8vICAgXFxjaGFyXCIxMjMgLS0gaGV4XG4vLyAgIFxcY2hhcmB4ICAgLS0gY2hhcmFjdGVyIHRoYXQgY2FuIGJlIHdyaXR0ZW4gKGkuZS4gaXNuJ3QgYWN0aXZlKVxuLy8gICBcXGNoYXJgXFx4ICAtLSBjaGFyYWN0ZXIgdGhhdCBjYW5ub3QgYmUgd3JpdHRlbiAoZS5nLiAlKVxuLy8gVGhlc2UgYWxsIHJlZmVyIHRvIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9udCwgc28gd2UgdHVybiB0aGVtIGludG8gc3BlY2lhbFxuLy8gY2FsbHMgdG8gYSBmdW5jdGlvbiBcXEBjaGFyIGRlYWx0IHdpdGggaW4gdGhlIFBhcnNlci5cblxuZGVmaW5lTWFjcm8oXCJcXFxcY2hhclwiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIHZhciBiYXNlO1xuICB2YXIgbnVtYmVyID0gJyc7XG5cbiAgaWYgKHRva2VuLnRleHQgPT09IFwiJ1wiKSB7XG4gICAgYmFzZSA9IDg7XG4gICAgdG9rZW4gPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIH0gZWxzZSBpZiAodG9rZW4udGV4dCA9PT0gJ1wiJykge1xuICAgIGJhc2UgPSAxNjtcbiAgICB0b2tlbiA9IGNvbnRleHQucG9wVG9rZW4oKTtcbiAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSBcImBcIikge1xuICAgIHRva2VuID0gY29udGV4dC5wb3BUb2tlbigpO1xuXG4gICAgaWYgKHRva2VuLnRleHRbMF0gPT09IFwiXFxcXFwiKSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbi50ZXh0ID09PSBcIkVPRlwiKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSB0b2tlbi50ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSAxMDtcbiAgfVxuXG4gIGlmIChiYXNlKSB7XG4gICAgLy8gUGFyc2UgYSBudW1iZXIgaW4gdGhlIGdpdmVuIGJhc2UsIHN0YXJ0aW5nIHdpdGggZmlyc3QgYHRva2VuYC5cbiAgICBudW1iZXIgPSBkaWdpdFRvTnVtYmVyW3Rva2VuLnRleHRdO1xuXG4gICAgaWYgKG51bWJlciA9PSBudWxsIHx8IG51bWJlciA+PSBiYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgYmFzZS1cIiArIGJhc2UgKyBcIiBkaWdpdCBcIiArIHRva2VuLnRleHQpO1xuICAgIH1cblxuICAgIHZhciBkaWdpdDtcblxuICAgIHdoaWxlICgoZGlnaXQgPSBkaWdpdFRvTnVtYmVyW2NvbnRleHQuZnV0dXJlKCkudGV4dF0pICE9IG51bGwgJiYgZGlnaXQgPCBiYXNlKSB7XG4gICAgICBudW1iZXIgKj0gYmFzZTtcbiAgICAgIG51bWJlciArPSBkaWdpdDtcbiAgICAgIGNvbnRleHQucG9wVG9rZW4oKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcXFxcQGNoYXJ7XCIgKyBudW1iZXIgKyBcIn1cIjtcbn0pOyAvLyBcXG5ld2NvbW1hbmR7XFxtYWNyb31bYXJnc117ZGVmaW5pdGlvbn1cbi8vIFxccmVuZXdjb21tYW5ke1xcbWFjcm99W2FyZ3Nde2RlZmluaXRpb259XG4vLyBUT0RPOiBPcHRpb25hbCBhcmd1bWVudHM6IFxcbmV3Y29tbWFuZHtcXG1hY3JvfVthcmdzXVtkZWZhdWx0XXtkZWZpbml0aW9ufVxuXG52YXIgbmV3Y29tbWFuZCA9IChjb250ZXh0LCBleGlzdHNPSywgbm9uZXhpc3RzT0spID0+IHtcbiAgdmFyIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcblxuICBpZiAoYXJnLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZVwiKTtcbiAgfVxuXG4gIHZhciBuYW1lID0gYXJnWzBdLnRleHQ7XG4gIHZhciBleGlzdHMgPSBjb250ZXh0LmlzRGVmaW5lZChuYW1lKTtcblxuICBpZiAoZXhpc3RzICYmICFleGlzdHNPSykge1xuICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXG5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IGF0dGVtcHRpbmcgdG8gcmVkZWZpbmUgXCIgKyAobmFtZSArIFwiOyB1c2UgXFxcXHJlbmV3Y29tbWFuZFwiKSk7XG4gIH1cblxuICBpZiAoIWV4aXN0cyAmJiAhbm9uZXhpc3RzT0spIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlxcXFxyZW5ld2NvbW1hbmR7XCIgKyBuYW1lICsgXCJ9IHdoZW4gY29tbWFuZCBcIiArIG5hbWUgKyBcIiBcIiArIFwiZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxcXG5ld2NvbW1hbmRcIik7XG4gIH1cblxuICB2YXIgbnVtQXJncyA9IDA7XG4gIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcblxuICBpZiAoYXJnLmxlbmd0aCA9PT0gMSAmJiBhcmdbMF0udGV4dCA9PT0gXCJbXCIpIHtcbiAgICB2YXIgYXJnVGV4dCA9ICcnO1xuICAgIHZhciB0b2tlbiA9IGNvbnRleHQuZXhwYW5kTmV4dFRva2VuKCk7XG5cbiAgICB3aGlsZSAodG9rZW4udGV4dCAhPT0gXCJdXCIgJiYgdG9rZW4udGV4dCAhPT0gXCJFT0ZcIikge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHByb3Blcmx5IGV4cGFuZCBhcmcsIGUuZy4sIGlnbm9yZSB7fXNcbiAgICAgIGFyZ1RleHQgKz0gdG9rZW4udGV4dDtcbiAgICAgIHRva2VuID0gY29udGV4dC5leHBhbmROZXh0VG9rZW4oKTtcbiAgICB9XG5cbiAgICBpZiAoIWFyZ1RleHQubWF0Y2goL15cXHMqWzAtOV0rXFxzKiQvKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHM6IFwiICsgYXJnVGV4dCk7XG4gICAgfVxuXG4gICAgbnVtQXJncyA9IHBhcnNlSW50KGFyZ1RleHQpO1xuICAgIGFyZyA9IGNvbnRleHQuY29uc3VtZUFyZygpLnRva2VucztcbiAgfSAvLyBGaW5hbCBhcmcgaXMgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFjcm9cblxuXG4gIGNvbnRleHQubWFjcm9zLnNldChuYW1lLCB7XG4gICAgdG9rZW5zOiBhcmcsXG4gICAgbnVtQXJnc1xuICB9KTtcbiAgcmV0dXJuICcnO1xufTtcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmV3Y29tbWFuZFwiLCBjb250ZXh0ID0+IG5ld2NvbW1hbmQoY29udGV4dCwgZmFsc2UsIHRydWUpKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlbmV3Y29tbWFuZFwiLCBjb250ZXh0ID0+IG5ld2NvbW1hbmQoY29udGV4dCwgdHJ1ZSwgZmFsc2UpKTtcbmRlZmluZU1hY3JvKFwiXFxcXHByb3ZpZGVjb21tYW5kXCIsIGNvbnRleHQgPT4gbmV3Y29tbWFuZChjb250ZXh0LCB0cnVlLCB0cnVlKSk7IC8vIHRlcm1pbmFsIChjb25zb2xlKSB0b29sc1xuXG5kZWZpbmVNYWNybyhcIlxcXFxtZXNzYWdlXCIsIGNvbnRleHQgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmxvZyhhcmcucmV2ZXJzZSgpLm1hcCh0b2tlbiA9PiB0b2tlbi50ZXh0KS5qb2luKFwiXCIpKTtcbiAgcmV0dXJuICcnO1xufSk7XG5kZWZpbmVNYWNybyhcIlxcXFxlcnJtZXNzYWdlXCIsIGNvbnRleHQgPT4ge1xuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJncygxKVswXTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICBjb25zb2xlLmVycm9yKGFyZy5yZXZlcnNlKCkubWFwKHRva2VuID0+IHRva2VuLnRleHQpLmpvaW4oXCJcIikpO1xuICByZXR1cm4gJyc7XG59KTtcbmRlZmluZU1hY3JvKFwiXFxcXHNob3dcIiwgY29udGV4dCA9PiB7XG4gIHZhciB0b2sgPSBjb250ZXh0LnBvcFRva2VuKCk7XG4gIHZhciBuYW1lID0gdG9rLnRleHQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgY29uc29sZS5sb2codG9rLCBjb250ZXh0Lm1hY3Jvcy5nZXQobmFtZSksIGZ1bmN0aW9uc1tuYW1lXSwgc3ltYm9scy5tYXRoW25hbWVdLCBzeW1ib2xzLnRleHRbbmFtZV0pO1xuICByZXR1cm4gJyc7XG59KTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gR3JvdXBpbmdcbi8vIFxcbGV0XFxiZ3JvdXA9eyBcXGxldFxcZWdyb3VwPX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcYmdyb3VwXCIsIFwie1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVncm91cFwiLCBcIn1cIik7IC8vIFN5bWJvbHMgZnJvbSBsYXRleC5sdHg6XG4vLyBcXGRlZn57XFxub2JyZWFrc3BhY2V7fX1cbi8vIFxcZGVmXFxscXtgfVxuLy8gXFxkZWZcXHJxeyd9XG4vLyBcXGRlZiBcXGFhIHtcXHIgYX1cbi8vIFxcZGVmIFxcQUEge1xcciBBfVxuXG5kZWZpbmVNYWNybyhcIn5cIiwgXCJcXFxcbm9icmVha3NwYWNlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHFcIiwgXCJgXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccnFcIiwgXCInXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWFcIiwgXCJcXFxcciBhXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQUFcIiwgXCJcXFxcciBBXCIpOyAvLyBDb3B5cmlnaHQgKEMpIGFuZCByZWdpc3RlcmVkIChSKSBzeW1ib2xzLiBVc2UgcmF3IHN5bWJvbCBpbiBNYXRoTUwuXG4vLyBcXERlY2xhcmVUZXh0Q29tbWFuZERlZmF1bHR7XFx0ZXh0Y29weXJpZ2h0fXtcXHRleHRjaXJjbGVke2N9fVxuLy8gXFxEZWNsYXJlVGV4dENvbW1hbmREZWZhdWx0e1xcdGV4dHJlZ2lzdGVyZWR9e1xcdGV4dGNpcmNsZWR7JVxuLy8gICAgICBcXGNoZWNrQG1hdGhmb250c1xcZm9udHNpemVcXHNmQHNpemVcXHpAXFxtYXRoQGZvbnRzZmFsc2VcXHNlbGVjdGZvbnQgUn19XG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcY29weXJpZ2h0fXslXG4vLyAgICBcXGlmbW1vZGV7XFxuZnNzQHRleHR7XFx0ZXh0Y29weXJpZ2h0fX1cXGVsc2VcXHRleHRjb3B5cmlnaHRcXGZpfVxuXG5kZWZpbmVNYWNybyhcIlxcXFx0ZXh0Y29weXJpZ2h0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFx0ZXh0Y2lyY2xlZHtjfX17XFxcXGNoYXJgwql9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29weXJpZ2h0XCIsIFwiXFxcXFRleHRPck1hdGh7XFxcXHRleHRjb3B5cmlnaHR9e1xcXFx0ZXh0e1xcXFx0ZXh0Y29weXJpZ2h0fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZXh0cmVnaXN0ZXJlZFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcdGV4dGNpcmNsZWR7XFxcXHNjcmlwdHNpemUgUn19e1xcXFxjaGFyYMKufVwiKTsgLy8gQ2hhcmFjdGVycyBvbWl0dGVkIGZyb20gVW5pY29kZSByYW5nZSAxRDQwMOKAkzFEN0ZGXG5cbmRlZmluZU1hY3JvKFwiXFx1MjEyQ1wiLCBcIlxcXFxtYXRoc2Nye0J9XCIpOyAvLyBzY3JpcHRcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTMwXCIsIFwiXFxcXG1hdGhzY3J7RX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMzFcIiwgXCJcXFxcbWF0aHNjcntGfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEwQlwiLCBcIlxcXFxtYXRoc2Nye0h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTEwXCIsIFwiXFxcXG1hdGhzY3J7SX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMTJcIiwgXCJcXFxcbWF0aHNjcntMfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjEzM1wiLCBcIlxcXFxtYXRoc2Nye019XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTFCXCIsIFwiXFxcXG1hdGhzY3J7Un1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIxMkRcIiwgXCJcXFxcbWF0aGZyYWt7Q31cIik7IC8vIEZyYWt0dXJcblxuZGVmaW5lTWFjcm8oXCJcXHUyMTBDXCIsIFwiXFxcXG1hdGhmcmFre0h9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMTI4XCIsIFwiXFxcXG1hdGhmcmFre1p9XCIpOyAvLyBEZWZpbmUgXFxCYmJrIHdpdGggYSBtYWNybyB0aGF0IHdvcmtzIGluIGJvdGggSFRNTCBhbmQgTWF0aE1MLlxuXG5kZWZpbmVNYWNybyhcIlxcXFxCYmJrXCIsIFwiXFxcXEJiYntrfVwiKTsgLy8gVW5pY29kZSBtaWRkbGUgZG90XG4vLyBUaGUgS2FUZVggZm9udHMgZG8gbm90IGNvbnRhaW4gVSswMEI3LiBJbnN0ZWFkLCBcXGNkb3RwIGRpc3BsYXlzXG4vLyB0aGUgZG90IGF0IFUrMjJDNSBhbmQgZ2l2ZXMgaXQgcHVuY3Qgc3BhY2luZy5cblxuZGVmaW5lTWFjcm8oXCJcXHUwMGI3XCIsIFwiXFxcXGNkb3RwXCIpOyAvLyBcXGxsYXAgYW5kIFxccmxhcCByZW5kZXIgdGhlaXIgY29udGVudHMgaW4gdGV4dCBtb2RlXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxsYXBcIiwgXCJcXFxcbWF0aGxsYXB7XFxcXHRleHRybXsjMX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmxhcFwiLCBcIlxcXFxtYXRocmxhcHtcXFxcdGV4dHJteyMxfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxjbGFwXCIsIFwiXFxcXG1hdGhjbGFwe1xcXFx0ZXh0cm17IzF9fVwiKTsgLy8gXFxtYXRoc3RydXQgZnJvbSB0aGUgVGVYYm9vaywgcCAzNjBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbWF0aHN0cnV0XCIsIFwiXFxcXHZwaGFudG9teyh9XCIpOyAvLyBcXHVuZGVyYmFyIGZyb20gVGVYYm9vayBwIDM1M1xuXG5kZWZpbmVNYWNybyhcIlxcXFx1bmRlcmJhclwiLCBcIlxcXFx1bmRlcmxpbmV7XFxcXHRleHR7IzF9fVwiKTsgLy8gXFxub3QgaXMgZGVmaW5lZCBieSBiYXNlL2ZvbnRtYXRoLmx0eCB2aWFcbi8vIFxcRGVjbGFyZU1hdGhTeW1ib2x7XFxub3R9e1xcbWF0aHJlbH17c3ltYm9sc317XCIzNn1cbi8vIEl0J3MgdGh1cyB0cmVhdGVkIGxpa2UgYSBcXG1hdGhyZWwsIGJ1dCBkZWZpbmVkIGJ5IGEgc3ltYm9sIHRoYXQgaGFzIHplcm9cbi8vIHdpZHRoIGJ1dCBleHRlbmRzIHRvIHRoZSByaWdodC4gIFdlIHVzZSBcXHJsYXAgdG8gZ2V0IHRoYXQgc3BhY2luZy5cbi8vIEZvciBNYXRoTUwgd2Ugd3JpdGUgVSswMzM4IGhlcmUuIGJ1aWxkTWF0aE1MLmpzIHdpbGwgdGhlbiBkbyB0aGUgb3ZlcmxheS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbm90XCIsICdcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7XFxcXG1hdGhybGFwXFxcXEBub3R9fXtcXFxcY2hhclwiMzM4fScpOyAvLyBOZWdhdGVkIHN5bWJvbHMgZnJvbSBiYXNlL2ZvbnRtYXRoLmx0eDpcbi8vIFxcZGVmXFxuZXF7XFxub3Q9fSBcXGxldFxcbmU9XFxuZXFcbi8vIFxcRGVjbGFyZVJvYnVzdENvbW1hbmRcbi8vICAgXFxub3RpbntcXG1hdGhyZWx7XFxtQHRoXFxtYXRocGFsZXR0ZVxcY0BuY2VsXFxpbn19XG4vLyBcXGRlZlxcY0BuY2VsIzEjMntcXG1AdGhcXG9vYWxpZ257JFxcaGZpbCMxXFxta2VybjFtdS9cXGhmaWwkXFxjcmNyJCMxIzIkfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxtYXRocmVse1xcXFxub3Q9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJg4omgfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZVwiLCBcIlxcXFxuZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNjBcIiwgXCJcXFxcbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbm90aW5cIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXG1hdGhyZWx7e1xcXFxpbn1cXFxcbWF0aGxsYXB7L1xcXFxtc2tpcDFtdX19fVwiICsgXCJ7XFxcXG1hdGhyZWx7XFxcXGNoYXJg4oiJfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyMDlcIiwgXCJcXFxcbm90aW5cIik7IC8vIFVuaWNvZGUgc3RhY2tlZCByZWxhdGlvbnNcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU4XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXGtlcm57LTFlbX1cXFxccmFpc2Vib3h7MC40ZW19eyRcXFxcc2NyaXB0c2l6ZVxcXFxmcm93biR9fVwiICsgXCJ9e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNTh9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1OVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcd2VkZ2V9ez19fXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjU4fX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNUFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXHZlZX17PX19e1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUF9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1QlwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHNjcmlwdHNpemVcXFxcc3Rhcn17PX19XCIgKyBcIntcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjVCfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcdTIyNURcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXHN0YWNrcmVse1xcXFx0aW55XFxcXG1hdGhybXtkZWZ9fXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnlcXFxcbWF0aHJte219fXs9fX1cIiArIFwie1xcXFxtYXRocmVse1xcXFxjaGFyYFxcdTIyNUV9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjI1RlwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcc3RhY2tyZWx7XFxcXHRpbnk/fXs9fX17XFxcXG1hdGhyZWx7XFxcXGNoYXJgXFx1MjI1Rn19XCIpOyAvLyBNaXNjIFVuaWNvZGVcblxuZGVmaW5lTWFjcm8oXCJcXHUyN0MyXCIsIFwiXFxcXHBlcnBcIik7XG5kZWZpbmVNYWNybyhcIlxcdTIwM0NcIiwgXCJcXFxcbWF0aGNsb3NleyFcXFxcbWtlcm4tMC44bXUhfVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjIwQ1wiLCBcIlxcXFxub3RuaVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxQ1wiLCBcIlxcXFx1bGNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRFwiLCBcIlxcXFx1cmNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRVwiLCBcIlxcXFxsbGNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjMxRlwiLCBcIlxcXFxscmNvcm5lclwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MDBBOVwiLCBcIlxcXFxjb3B5cmlnaHRcIik7XG5kZWZpbmVNYWNybyhcIlxcdTAwQUVcIiwgXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIik7XG5kZWZpbmVNYWNybyhcIlxcdUZFMEZcIiwgXCJcXFxcdGV4dHJlZ2lzdGVyZWRcIik7IC8vIFRoZSBLYVRlWCBmb250cyBoYXZlIGNvcm5lcnMgYXQgY29kZXBvaW50cyB0aGF0IGRvbid0IG1hdGNoIFVuaWNvZGUuXG4vLyBGb3IgTWF0aE1MIHB1cnBvc2VzLCB1c2UgdGhlIFVuaWNvZGUgY29kZSBwb2ludC5cblxuZGVmaW5lTWFjcm8oXCJcXFxcdWxjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB1bGNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFjfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx1cmNvcm5lclwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHVyY29ybmVyfXtcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIzMWR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxsY29ybmVyXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAbGxjb3JuZXJ9e1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjMxZX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJjb3JuZXJcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBscmNvcm5lcn17XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMzFmfX1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIExhVGVYXzLOtVxuLy8gXFx2ZG90c3tcXHZib3h7XFxiYXNlbGluZXNraXA0XFxwQCAgXFxsaW5lc2tpcGxpbWl0XFx6QFxuLy8gXFxrZXJuNlxccEBcXGhib3h7Ln1cXGhib3h7Ln1cXGhib3h7Ln19fVxuLy8gV2UnbGwgY2FsbCBcXHZhcnZkb3RzLCB3aGljaCBnZXRzIGEgZ2x5cGggZnJvbSBzeW1ib2xzLmpzLlxuLy8gVGhlIHplcm8td2lkdGggcnVsZSBnZXRzIHVzIGFuIGVxdWl2YWxlbnQgdG8gdGhlIHZlcnRpY2FsIDZwdCBrZXJuLlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2ZG90c1wiLCBcIlxcXFxtYXRob3Jke1xcXFx2YXJ2ZG90c1xcXFxydWxlezBwdH17MTVwdH19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXHUyMmVlXCIsIFwiXFxcXHZkb3RzXCIpOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBhbXNtYXRoLnN0eVxuLy8gaHR0cDovL21pcnJvcnMuY29uY2VydHBhc3MuY29tL3RleC1hcmNoaXZlL21hY3Jvcy9sYXRleC9yZXF1aXJlZC9hbXNtYXRoL2Ftc21hdGgucGRmXG4vLyBJdGFsaWMgR3JlZWsgY2FwaXRhbCBsZXR0ZXJzLiAgQU1TIGRlZmluZXMgdGhlc2Ugd2l0aCBcXERlY2xhcmVNYXRoU3ltYm9sLFxuLy8gYnV0IHRoZXkgYXJlIGVxdWl2YWxlbnQgdG8gXFxtYXRoaXR7XFxMZXR0ZXJ9LlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2YXJHYW1tYVwiLCBcIlxcXFxtYXRoaXR7XFxcXEdhbW1hfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhckRlbHRhXCIsIFwiXFxcXG1hdGhpdHtcXFxcRGVsdGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyVGhldGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxUaGV0YX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJMYW1iZGFcIiwgXCJcXFxcbWF0aGl0e1xcXFxMYW1iZGF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyWGlcIiwgXCJcXFxcbWF0aGl0e1xcXFxYaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJQaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclNpZ21hXCIsIFwiXFxcXG1hdGhpdHtcXFxcU2lnbWF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyVXBzaWxvblwiLCBcIlxcXFxtYXRoaXR7XFxcXFVwc2lsb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyUGhpXCIsIFwiXFxcXG1hdGhpdHtcXFxcUGhpfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhclBzaVwiLCBcIlxcXFxtYXRoaXR7XFxcXFBzaX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJPbWVnYVwiLCBcIlxcXFxtYXRoaXR7XFxcXE9tZWdhfVwiKTsgLy9cXG5ld2NvbW1hbmR7XFxzdWJzdGFja31bMV17XFxzdWJhcnJheXtjfSMxXFxlbmRzdWJhcnJheX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcc3Vic3RhY2tcIiwgXCJcXFxcYmVnaW57c3ViYXJyYXl9e2N9IzFcXFxcZW5ke3N1YmFycmF5fVwiKTsgLy8gXFxyZW5ld2NvbW1hbmR7XFxjb2xvbn17XFxub2JyZWFrXFxtc2tpcDJtdVxcbWF0aHB1bmN0e31cXG5vbnNjcmlwdFxuLy8gXFxta2Vybi1cXHRoaW5tdXNraXB7On1cXG1za2lwNm11cGx1czFtdVxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uXCIsIFwiXFxcXG5vYnJlYWtcXFxcbXNraXAybXVcXFxcbWF0aHB1bmN0e31cIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1rZXJuLTNtdX17XFxcXG1rZXJuLTNtdX17fXt9ezp9XFxcXG1za2lwNm11XFxcXHJlbGF4XCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxib3hlZH1bMV17XFxmYm94e1xcbUB0aCRcXGRpc3BsYXlzdHlsZSMxJH19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGJveGVkXCIsIFwiXFxcXGZib3h7JFxcXFxkaXNwbGF5c3R5bGV7IzF9JH1cIik7IC8vIFxcZGVmXFxpZmZ7XFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7fVxuLy8gXFxkZWZcXGltcGxpZXN7XFxET1RTQlxcO1xcTG9uZ3JpZ2h0YXJyb3dcXDt9XG4vLyBcXGRlZlxcaW1wbGllZGJ5e1xcRE9UU0JcXDtcXExvbmdsZWZ0YXJyb3dcXDt9XG5cbmRlZmluZU1hY3JvKFwiXFxcXGlmZlwiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdsZWZ0cmlnaHRhcnJvd1xcXFw7XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1wbGllc1wiLCBcIlxcXFxET1RTQlxcXFw7XFxcXExvbmdyaWdodGFycm93XFxcXDtcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbXBsaWVkYnlcIiwgXCJcXFxcRE9UU0JcXFxcO1xcXFxMb25nbGVmdGFycm93XFxcXDtcIik7IC8vIEFNU01hdGgncyBhdXRvbWF0aWMgXFxkb3RzLCBiYXNlZCBvbiBcXG1kb3RzQEAgbWFjcm8uXG5cbnZhciBkb3RzQnlUb2tlbiA9IHtcbiAgJywnOiAnXFxcXGRvdHNjJyxcbiAgJ1xcXFxub3QnOiAnXFxcXGRvdHNiJyxcbiAgLy8gXFxrZXliaW5AIGNoZWNrcyBmb3IgdGhlIGZvbGxvd2luZzpcbiAgJysnOiAnXFxcXGRvdHNiJyxcbiAgJz0nOiAnXFxcXGRvdHNiJyxcbiAgJzwnOiAnXFxcXGRvdHNiJyxcbiAgJz4nOiAnXFxcXGRvdHNiJyxcbiAgJy0nOiAnXFxcXGRvdHNiJyxcbiAgJyonOiAnXFxcXGRvdHNiJyxcbiAgJzonOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcRE9UU0I6XG4gICdcXFxcRE9UU0InOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxjb3Byb2QnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd2ZWUnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxiaWd3ZWRnZSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3VwbHVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnY2FwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnY3VwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxccHJvZCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHN1bSc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ290aW1lcyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ29wbHVzJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcYmlnb2RvdCc6ICdcXFxcZG90c2InLFxuICAnXFxcXGJpZ3NxY3VwJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcQW5kJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ3JpZ2h0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25ncmlnaHRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAnXFxcXGxvbmdsZWZ0YXJyb3cnOiAnXFxcXGRvdHNiJyxcbiAgJ1xcXFxMb25nbGVmdGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ2xlZnRyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcTG9uZ2xlZnRyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbWFwc3RvJzogJ1xcXFxkb3RzYicsXG4gICdcXFxcbG9uZ21hcHN0byc6ICdcXFxcZG90c2InLFxuICAnXFxcXGhvb2tyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxcZG90ZXEnOiAnXFxcXGRvdHNiJyxcbiAgLy8gU3ltYm9scyB3aG9zZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIFxcbWF0aGJpbjpcbiAgJ1xcXFxtYXRoYmluJzogJ1xcXFxkb3RzYicsXG4gIC8vIFN5bWJvbHMgd2hvc2UgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBcXG1hdGhyZWw6XG4gICdcXFxcbWF0aHJlbCc6ICdcXFxcZG90c2InLFxuICAnXFxcXHJlbGJhcic6ICdcXFxcZG90c2InLFxuICAnXFxcXFJlbGJhcic6ICdcXFxcZG90c2InLFxuICAnXFxcXHhyaWdodGFycm93JzogJ1xcXFxkb3RzYicsXG4gICdcXFxceGxlZnRhcnJvdyc6ICdcXFxcZG90c2InLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTSTpcbiAgJ1xcXFxET1RTSSc6ICdcXFxcZG90c2knLFxuICAnXFxcXGludCc6ICdcXFxcZG90c2knLFxuICAnXFxcXG9pbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaW50JzogJ1xcXFxkb3RzaScsXG4gICdcXFxcaWlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpaWlpbnQnOiAnXFxcXGRvdHNpJyxcbiAgJ1xcXFxpZG90c2ludCc6ICdcXFxcZG90c2knLFxuICAvLyBTeW1ib2xzIHdob3NlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggXFxET1RTWDpcbiAgJ1xcXFxET1RTWCc6ICdcXFxcZG90c3gnXG59O1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAvLyBUT0RPOiBJZiB1c2VkIGluIHRleHQgbW9kZSwgc2hvdWxkIGV4cGFuZCB0byBcXHRleHRlbGxpcHNpcy5cbiAgLy8gSG93ZXZlciwgaW4gS2FUZVgsIFxcdGV4dGVsbGlwc2lzIGFuZCBcXGxkb3RzIGJlaGF2ZSB0aGUgc2FtZVxuICAvLyAoaW4gdGV4dCBtb2RlKSwgYW5kIGl0J3MgdW5saWtlbHkgd2UnZCBzZWUgYW55IG9mIHRoZSBtYXRoIGNvbW1hbmRzXG4gIC8vIHRoYXQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBcXGRvdHMgd2hlbiBpbiB0ZXh0IG1vZGUuICBTbyBmaW5lIGZvciBub3dcbiAgLy8gKHVudGlsIHdlIHN1cHBvcnQgXFxpZm1tb2RlIC4uLiBcXGVsc2UgLi4uIFxcZmkpLlxuICB2YXIgdGhlZG90cyA9ICdcXFxcZG90c28nO1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZXhwYW5kQWZ0ZXJGdXR1cmUoKS50ZXh0O1xuXG4gIGlmIChuZXh0IGluIGRvdHNCeVRva2VuKSB7XG4gICAgdGhlZG90cyA9IGRvdHNCeVRva2VuW25leHRdO1xuICB9IGVsc2UgaWYgKG5leHQuc2xpY2UoMCwgNCkgPT09ICdcXFxcbm90Jykge1xuICAgIHRoZWRvdHMgPSAnXFxcXGRvdHNiJztcbiAgfSBlbHNlIGlmIChuZXh0IGluIHN5bWJvbHMubWF0aCkge1xuICAgIGlmICh1dGlscy5jb250YWlucyhbJ2JpbicsICdyZWwnXSwgc3ltYm9scy5tYXRoW25leHRdLmdyb3VwKSkge1xuICAgICAgdGhlZG90cyA9ICdcXFxcZG90c2InO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGVkb3RzO1xufSk7XG52YXIgc3BhY2VBZnRlckRvdHMgPSB7XG4gIC8vIFxccmlnaHRkZWxpbUAgY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnKSc6IHRydWUsXG4gICddJzogdHJ1ZSxcbiAgJ1xcXFxyYnJhY2snOiB0cnVlLFxuICAnXFxcXH0nOiB0cnVlLFxuICAnXFxcXHJicmFjZSc6IHRydWUsXG4gICdcXFxccmFuZ2xlJzogdHJ1ZSxcbiAgJ1xcXFxyY2VpbCc6IHRydWUsXG4gICdcXFxccmZsb29yJzogdHJ1ZSxcbiAgJ1xcXFxyZ3JvdXAnOiB0cnVlLFxuICAnXFxcXHJtb3VzdGFjaGUnOiB0cnVlLFxuICAnXFxcXHJpZ2h0JzogdHJ1ZSxcbiAgJ1xcXFxiaWdyJzogdHJ1ZSxcbiAgJ1xcXFxiaWdncic6IHRydWUsXG4gICdcXFxcQmlncic6IHRydWUsXG4gICdcXFxcQmlnZ3InOiB0cnVlLFxuICAvLyBcXGV4dHJhQCBhbHNvIHRlc3RzIGZvciB0aGUgZm9sbG93aW5nOlxuICAnJCc6IHRydWUsXG4gIC8vIFxcZXh0cmFwQCBjaGVja3MgZm9yIHRoZSBmb2xsb3dpbmc6XG4gICc7JzogdHJ1ZSxcbiAgJy4nOiB0cnVlLFxuICAnLCc6IHRydWVcbn07XG5kZWZpbmVNYWNybyhcIlxcXFxkb3Rzb1wiLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICB2YXIgbmV4dCA9IGNvbnRleHQuZnV0dXJlKCkudGV4dDtcblxuICBpZiAobmV4dCBpbiBzcGFjZUFmdGVyRG90cykge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2NcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7IC8vIFxcZG90c2MgdXNlcyBcXGV4dHJhQCBidXQgbm90IFxcZXh0cmFwQCwgaW5zdGVhZCBzcGVjaWFsbHkgY2hlY2tpbmcgZm9yXG4gIC8vICc7JyBhbmQgJy4nLCBidXQgZG9lc24ndCBjaGVjayBmb3IgJywnLlxuXG4gIGlmIChuZXh0IGluIHNwYWNlQWZ0ZXJEb3RzICYmIG5leHQgIT09ICcsJykge1xuICAgIHJldHVybiBcIlxcXFxsZG90c1xcXFwsXCI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiXFxcXGxkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcY2RvdHNcIiwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgdmFyIG5leHQgPSBjb250ZXh0LmZ1dHVyZSgpLnRleHQ7XG5cbiAgaWYgKG5leHQgaW4gc3BhY2VBZnRlckRvdHMpIHtcbiAgICByZXR1cm4gXCJcXFxcQGNkb3RzXFxcXCxcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcXFxcQGNkb3RzXCI7XG4gIH1cbn0pO1xuZGVmaW5lTWFjcm8oXCJcXFxcZG90c2JcIiwgXCJcXFxcY2RvdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxkb3RzbVwiLCBcIlxcXFxjZG90c1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRvdHNpXCIsIFwiXFxcXCFcXFxcY2RvdHNcIik7IC8vIGFtc21hdGggZG9lc24ndCBhY3R1YWxseSBkZWZpbmUgXFxkb3RzeCwgYnV0IFxcZG90cyBmb2xsb3dlZCBieSBhIG1hY3JvXG4vLyBzdGFydGluZyB3aXRoIFxcRE9UU1ggaW1wbGllcyBcXGRvdHNvLCBhbmQgdGhlbiBcXGV4dHJhQCBkZXRlY3RzIHRoaXMgY2FzZVxuLy8gYW5kIGZvcmNlcyB0aGUgYWRkZWQgYFxcLGAuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGRvdHN4XCIsIFwiXFxcXGxkb3RzXFxcXCxcIik7IC8vIFxcbGV0XFxET1RTSVxccmVsYXhcbi8vIFxcbGV0XFxET1RTQlxccmVsYXhcbi8vIFxcbGV0XFxET1RTWFxccmVsYXhcblxuZGVmaW5lTWFjcm8oXCJcXFxcRE9UU0lcIiwgXCJcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxET1RTQlwiLCBcIlxcXFxyZWxheFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXERPVFNYXCIsIFwiXFxcXHJlbGF4XCIpOyAvLyBTcGFjaW5nLCBiYXNlZCBvbiBhbXNtYXRoLnN0eSdzIG92ZXJyaWRlIG9mIExhVGVYIGRlZmF1bHRzXG4vLyBcXERlY2xhcmVSb2J1c3RDb21tYW5ke1xcdG1zcGFjZX1bM117JVxuLy8gICBcXGlmbW1vZGVcXG1za2lwIzEjMlxcZWxzZVxca2VybiMxIzNcXGZpXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcdG1zcGFjZVwiLCBcIlxcXFxUZXh0T3JNYXRoe1xcXFxrZXJuIzEjM317XFxcXG1za2lwIzEjMn1cXFxccmVsYXhcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcLH17XFx0bXNwYWNlK1xcdGhpbm11c2tpcHsuMTY2N2VtfX1cbi8vIFRPRE86IG1hdGggbW9kZSBzaG91bGQgdXNlIFxcdGhpbm11c2tpcFxuXG5kZWZpbmVNYWNybyhcIlxcXFwsXCIsIFwiXFxcXHRtc3BhY2UrezNtdX17LjE2NjdlbX1cIik7IC8vIFxcbGV0XFx0aGluc3BhY2VcXCxcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGhpbnNwYWNlXCIsIFwiXFxcXCxcIik7IC8vIFxcZGVmXFw+e1xcbXNraXBcXG1lZG11c2tpcH1cbi8vIFxccmVuZXdjb21tYW5ke1xcOn17XFx0bXNwYWNlK1xcbWVkbXVza2lwey4yMjIyZW19fVxuLy8gVE9ETzogXFw+IGFuZCBtYXRoIG1vZGUgb2YgXFw6IHNob3VsZCB1c2UgXFxtZWRtdXNraXAgPSA0bXUgcGx1cyAybXUgbWludXMgNG11XG5cbmRlZmluZU1hY3JvKFwiXFxcXD5cIiwgXCJcXFxcbXNraXB7NG11fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXDpcIiwgXCJcXFxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfVwiKTsgLy8gXFxsZXRcXG1lZHNwYWNlXFw6XG5cbmRlZmluZU1hY3JvKFwiXFxcXG1lZHNwYWNlXCIsIFwiXFxcXDpcIik7IC8vIFxccmVuZXdjb21tYW5ke1xcO317XFx0bXNwYWNlK1xcdGhpY2ttdXNraXB7LjI3NzdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaWNrbXVza2lwID0gNW11IHBsdXMgNW11XG5cbmRlZmluZU1hY3JvKFwiXFxcXDtcIiwgXCJcXFxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfVwiKTsgLy8gXFxsZXRcXHRoaWNrc3BhY2VcXDtcblxuZGVmaW5lTWFjcm8oXCJcXFxcdGhpY2tzcGFjZVwiLCBcIlxcXFw7XCIpOyAvLyBcXHJlbmV3Y29tbWFuZHtcXCF9e1xcdG1zcGFjZS1cXHRoaW5tdXNraXB7LjE2NjdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaW5tdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcIVwiLCBcIlxcXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19XCIpOyAvLyBcXGxldFxcbmVndGhpbnNwYWNlXFwhXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ3RoaW5zcGFjZVwiLCBcIlxcXFwhXCIpOyAvLyBcXG5ld2NvbW1hbmR7XFxuZWdtZWRzcGFjZX17XFx0bXNwYWNlLVxcbWVkbXVza2lwey4yMjIyZW19fVxuLy8gVE9ETzogbWF0aCBtb2RlIHNob3VsZCB1c2UgXFxtZWRtdXNraXBcblxuZGVmaW5lTWFjcm8oXCJcXFxcbmVnbWVkc3BhY2VcIiwgXCJcXFxcdG1zcGFjZS17NG11fXsuMjIyMmVtfVwiKTsgLy8gXFxuZXdjb21tYW5ke1xcbmVndGhpY2tzcGFjZX17XFx0bXNwYWNlLVxcdGhpY2ttdXNraXB7LjI3NzdlbX19XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXHRoaWNrbXVza2lwXG5cbmRlZmluZU1hY3JvKFwiXFxcXG5lZ3RoaWNrc3BhY2VcIiwgXCJcXFxcdG1zcGFjZS17NW11fXsuMjc3ZW19XCIpOyAvLyBcXGRlZlxcZW5zcGFjZXtcXGtlcm4uNWVtIH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZW5zcGFjZVwiLCBcIlxcXFxrZXJuLjVlbSBcIik7IC8vIFxcZGVmXFxlbnNraXB7XFxoc2tpcC41ZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxlbnNraXBcIiwgXCJcXFxcaHNraXAuNWVtXFxcXHJlbGF4XCIpOyAvLyBcXGRlZlxccXVhZHtcXGhza2lwMWVtXFxyZWxheH1cblxuZGVmaW5lTWFjcm8oXCJcXFxccXVhZFwiLCBcIlxcXFxoc2tpcDFlbVxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXHFxdWFke1xcaHNraXAyZW1cXHJlbGF4fVxuXG5kZWZpbmVNYWNybyhcIlxcXFxxcXVhZFwiLCBcIlxcXFxoc2tpcDJlbVxcXFxyZWxheFwiKTsgLy8gXFx0YWdAaW5AZGlzcGxheSBmb3JtIG9mIFxcdGFnXG5cbmRlZmluZU1hY3JvKFwiXFxcXHRhZ1wiLCBcIlxcXFxAaWZzdGFyXFxcXHRhZ0BsaXRlcmFsXFxcXHRhZ0BwYXJlblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRhZ0BwYXJlblwiLCBcIlxcXFx0YWdAbGl0ZXJhbHsoeyMxfSl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGFnQGxpdGVyYWxcIiwgY29udGV4dCA9PiB7XG4gIGlmIChjb250ZXh0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJNdWx0aXBsZSBcXFxcdGFnXCIpO1xuICB9XG5cbiAgcmV0dXJuIFwiXFxcXGdkZWZcXFxcZGZAdGFne1xcXFx0ZXh0eyMxfX1cIjtcbn0pOyAvLyBcXHJlbmV3Y29tbWFuZHtcXGJtb2R9e1xcbm9uc2NyaXB0XFxtc2tpcC1cXG1lZG11c2tpcFxcbWtlcm41bXVcXG1hdGhiaW5cbi8vICAge1xcb3BlcmF0b3JAZm9udCBtb2R9XFxwZW5hbHR5OTAwXG4vLyAgIFxcbWtlcm41bXVcXG5vbnNjcmlwdFxcbXNraXAtXFxtZWRtdXNraXB9XG4vLyBcXG5ld2NvbW1hbmR7XFxwb2R9WzFde1xcYWxsb3dicmVha1xuLy8gICBcXGlmQGRpc3BsYXlcXG1rZXJuMThtdVxcZWxzZVxcbWtlcm44bXVcXGZpKCMxKX1cbi8vIFxccmVuZXdjb21tYW5ke1xccG1vZH1bMV17XFxwb2R7e1xcb3BlcmF0b3JAZm9udCBtb2R9XFxta2VybjZtdSMxfX1cbi8vIFxcbmV3Y29tbWFuZHtcXG1vZH1bMV17XFxhbGxvd2JyZWFrXFxpZkBkaXNwbGF5XFxta2VybjE4bXVcbi8vICAgXFxlbHNlXFxta2VybjEybXVcXGZpe1xcb3BlcmF0b3JAZm9udCBtb2R9XFwsXFwsIzF9XG4vLyBUT0RPOiBtYXRoIG1vZGUgc2hvdWxkIHVzZSBcXG1lZG11c2tpcCA9IDRtdSBwbHVzIDJtdSBtaW51cyA0bXVcblxuZGVmaW5lTWFjcm8oXCJcXFxcYm1vZFwiLCBcIlxcXFxtYXRoY2hvaWNle1xcXFxtc2tpcDFtdX17XFxcXG1za2lwMW11fXtcXFxcbXNraXA1bXV9e1xcXFxtc2tpcDVtdX1cIiArIFwiXFxcXG1hdGhiaW57XFxcXHJtIG1vZH1cIiArIFwiXFxcXG1hdGhjaG9pY2V7XFxcXG1za2lwMW11fXtcXFxcbXNraXAxbXV9e1xcXFxtc2tpcDVtdX17XFxcXG1za2lwNW11fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBvZFwiLCBcIlxcXFxhbGxvd2JyZWFrXCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2VybjE4bXV9e1xcXFxta2VybjhtdX17XFxcXG1rZXJuOG11fXtcXFxcbWtlcm44bXV9KCMxKVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBtb2RcIiwgXCJcXFxccG9ke3tcXFxccm0gbW9kfVxcXFxta2VybjZtdSMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1vZFwiLCBcIlxcXFxhbGxvd2JyZWFrXCIgKyBcIlxcXFxtYXRoY2hvaWNle1xcXFxta2VybjE4bXV9e1xcXFxta2VybjEybXV9e1xcXFxta2VybjEybXV9e1xcXFxta2VybjEybXV9XCIgKyBcIntcXFxccm0gbW9kfVxcXFwsXFxcXCwjMVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTGFUZVggc291cmNlMmVcbi8vIFxcZXhwYW5kYWZ0ZXJcXGxldFxcZXhwYW5kYWZ0ZXJcXEBub3JtYWxjclxuLy8gICAgIFxcY3NuYW1lXFxleHBhbmRhZnRlclxcQGdvYmJsZVxcc3RyaW5nXFxcXCBcXGVuZGNzbmFtZVxuLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZFxcbmV3bGluZXtcXEBub3JtYWxjclxccmVsYXh9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG5ld2xpbmVcIiwgXCJcXFxcXFxcXFxcXFxyZWxheFwiKTsgLy8gXFxkZWZcXFRlWHtUXFxrZXJuLS4xNjY3ZW1cXGxvd2VyLjVleFxcaGJveHtFfVxca2Vybi0uMTI1ZW1YXFxAfVxuLy8gVE9ETzogRG9lc24ndCBub3JtYWxseSB3b3JrIGluIG1hdGggbW9kZSBiZWNhdXNlIFxcQCBmYWlscy4gIEthVGVYIGRvZXNuJ3Rcbi8vIHN1cHBvcnQgXFxAIHlldCwgc28gdGhhdCdzIG9taXR0ZWQsIGFuZCB3ZSBhZGQgXFx0ZXh0IHNvIHRoYXQgdGhlIHJlc3VsdFxuLy8gZG9lc24ndCBsb29rIGZ1bm55IGluIG1hdGggbW9kZS5cblxuZGVmaW5lTWFjcm8oXCJcXFxcVGVYXCIsIFwiXFxcXHRleHRybXtcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlRcXFxca2Vybi0uMTY2N2VtXFxcXHJhaXNlYm94ey0uNWV4fXtFfVxcXFxrZXJuLS4xMjVlbVhcIiArIFwifXtUZVh9fVwiKTsgLy8gXFxEZWNsYXJlUm9idXN0Q29tbWFuZHtcXExhVGVYfXtMXFxrZXJuLS4zNmVtJVxuLy8gICAgICAgICB7XFxzYm94XFx6QCBUJVxuLy8gICAgICAgICAgXFx2Ym94IHRvXFxodFxcekB7XFxoYm94e1xcY2hlY2tAbWF0aGZvbnRzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXGZvbnRzaXplXFxzZkBzaXplXFx6QFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxtYXRoQGZvbnRzZmFsc2VcXHNlbGVjdGZvbnRcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF9JVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgXFx2c3N9JVxuLy8gICAgICAgICB9JVxuLy8gICAgICAgICBcXGtlcm4tLjE1ZW0lXG4vLyAgICAgICAgIFxcVGVYfVxuLy8gVGhpcyBjb2RlIGFsaWducyB0aGUgdG9wIG9mIHRoZSBBIHdpdGggdGhlIFQgKGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIFRlWCdzXG4vLyBib3hlcywgdGhvdWdoIHZpc3VhbGx5IHRoZSBBIGFwcGVhcnMgdG8gZXh0ZW5kIGFib3ZlIHNsaWdodGx5KS5cbi8vIFdlIGNvbXB1dGUgdGhlIGNvcnJlc3BvbmRpbmcgXFxyYWlzZWJveCB3aGVuIEEgaXMgcmVuZGVyZWQgaW4gXFxub3JtYWxzaXplXG4vLyBcXHNjcmlwdHN0eWxlLCB3aGljaCBoYXMgYSBzY2FsZSBmYWN0b3Igb2YgMC43IChzZWUgT3B0aW9ucy5qcykuXG5cbnZhciBsYXRleFJhaXNlQSA9IG1ha2VFbShmb250TWV0cmljc0RhdGFbJ01haW4tUmVndWxhciddW1wiVFwiLmNoYXJDb2RlQXQoMCldWzFdIC0gMC43ICogZm9udE1ldHJpY3NEYXRhWydNYWluLVJlZ3VsYXInXVtcIkFcIi5jaGFyQ29kZUF0KDApXVsxXSk7XG5kZWZpbmVNYWNybyhcIlxcXFxMYVRlWFwiLCBcIlxcXFx0ZXh0cm17XFxcXGh0bWxAbWF0aG1se1wiICsgKFwiTFxcXFxrZXJuLS4zNmVtXFxcXHJhaXNlYm94e1wiICsgbGF0ZXhSYWlzZUEgKyBcIn17XFxcXHNjcmlwdHN0eWxlIEF9XCIpICsgXCJcXFxca2Vybi0uMTVlbVxcXFxUZVh9e0xhVGVYfX1cIik7IC8vIE5ldyBLYVRlWCBsb2dvIGJhc2VkIG9uIHR3ZWFraW5nIExhVGVYIGxvZ29cblxuZGVmaW5lTWFjcm8oXCJcXFxcS2FUZVhcIiwgXCJcXFxcdGV4dHJte1xcXFxodG1sQG1hdGhtbHtcIiArIChcIktcXFxca2Vybi0uMTdlbVxcXFxyYWlzZWJveHtcIiArIGxhdGV4UmFpc2VBICsgXCJ9e1xcXFxzY3JpcHRzdHlsZSBBfVwiKSArIFwiXFxcXGtlcm4tLjE1ZW1cXFxcVGVYfXtLYVRlWH19XCIpOyAvLyBcXERlY2xhcmVSb2J1c3RDb21tYW5kXFxoc3BhY2V7XFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZX1cbi8vIFxcZGVmXFxAaHNwYWNlIzF7XFxoc2tpcCAgIzFcXHJlbGF4fVxuLy8gXFxkZWZcXEBoc3BhY2VyIzF7XFx2cnVsZSBcXEB3aWR0aFxcekBcXG5vYnJlYWtcbi8vICAgICAgICAgICAgICAgICBcXGhza2lwICMxXFxoc2tpcCBcXHpAc2tpcH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcaHNwYWNlXCIsIFwiXFxcXEBpZnN0YXJcXFxcQGhzcGFjZXJcXFxcQGhzcGFjZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEBoc3BhY2VcIiwgXCJcXFxcaHNraXAgIzFcXFxccmVsYXhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxAaHNwYWNlclwiLCBcIlxcXFxydWxlezBwdH17MHB0fVxcXFxoc2tpcCAjMVxcXFxyZWxheFwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0aHRvb2xzLnN0eVxuLy9cXHByb3ZpZGVjb21tYW5kXFxvcmRpbmFyeWNvbG9uezp9XG5cbmRlZmluZU1hY3JvKFwiXFxcXG9yZGluYXJ5Y29sb25cIiwgXCI6XCIpOyAvL1xcZGVmXFx2Y2VudGNvbG9ue1xcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn19XG4vL1RPRE8oZWRlbWFpbmUpOiBOb3QgeWV0IGNlbnRlcmVkLiBGaXggdmlhIFxccmFpc2Vib3ggb3IgIzcyNlxuXG5kZWZpbmVNYWNybyhcIlxcXFx2Y2VudGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhvcFxcXFxvcmRpbmFyeWNvbG9ufVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGRibGNvbG9ue1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYmxjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tLjltdX1cXFxcdmNlbnRjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMzd9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uZXFxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19XG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHtcXFxcdmNlbnRjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NH19XCIpOyAvLyDiiZRcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxDb2xvbmVxcXtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX09fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjNkfX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmVxe1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXG1hdGhyZWx7LX19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uZXF7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25lcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxtYXRocmVsey19fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyMTJ9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGVxcWNvbG9uez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXGVxcWNvbG9uXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aHJlbHs9XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFx2Y2VudGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjI1NX19XCIpOyAvLyDiiZVcbi8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcXFjb2xvbns9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcRXFxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVsez1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiM2RcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxlcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn1cblxuZGVmaW5lTWFjcm8oXCJcXFxcZXFjb2xvblwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXG1hdGhyZWx7LX1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM5fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxFcWNvbG9ue1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259XG5cbmRlZmluZU1hY3JvKFwiXFxcXEVxY29sb25cIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxtYXRocmVsey19XFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxkYmxjb2xvbn19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjIyMTJcXFxcY2hhclxcXCIyMjM3fX1cIik7IC8vIFxccHJvdmlkZWNvbW1hbmQqXFxjb2xvbmFwcHJveHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFx2Y2VudGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxhcHByb3h9fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIzYVxcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXENvbG9uYXBwcm94e1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH1cblxuZGVmaW5lTWFjcm8oXCJcXFxcQ29sb25hcHByb3hcIiwgXCJcXFxcaHRtbEBtYXRobWx7XCIgKyBcIlxcXFxtYXRocmVse1xcXFxkYmxjb2xvblxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcYXBwcm94fX1cIiArIFwie1xcXFxtYXRob3B7XFxcXGNoYXJcXFwiMjIzN1xcXFxjaGFyXFxcIjIyNDh9fVwiKTsgLy8gXFxwcm92aWRlY29tbWFuZCpcXGNvbG9uc2lte1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxjb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXHZjZW50Y29sb25cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHNpbX19XCIgKyBcIntcXFxcbWF0aG9we1xcXFxjaGFyXFxcIjNhXFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBcXHByb3ZpZGVjb21tYW5kKlxcQ29sb25zaW17XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxDb2xvbnNpbVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhyZWx7XFxcXGRibGNvbG9uXFxcXG1hdGhyZWx7XFxcXG1rZXJuLTEuMm11fVxcXFxzaW19fVwiICsgXCJ7XFxcXG1hdGhvcHtcXFxcY2hhclxcXCIyMjM3XFxcXGNoYXJcXFwiMjIzY319XCIpOyAvLyBTb21lIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3MgdG8gbWF0aHRvb2xzIGZ1bmN0aW9ucy5cblxuZGVmaW5lTWFjcm8oXCJcXHUyMjM3XCIsIFwiXFxcXGRibGNvbG9uXCIpOyAvLyA6OlxuXG5kZWZpbmVNYWNybyhcIlxcdTIyMzlcIiwgXCJcXFxcZXFjb2xvblwiKTsgLy8gLTpcblxuZGVmaW5lTWFjcm8oXCJcXHUyMjU0XCIsIFwiXFxcXGNvbG9uZXFxXCIpOyAvLyA6PVxuXG5kZWZpbmVNYWNybyhcIlxcdTIyNTVcIiwgXCJcXFxcZXFxY29sb25cIik7IC8vID06XG5cbmRlZmluZU1hY3JvKFwiXFx1MkE3NFwiLCBcIlxcXFxDb2xvbmVxcVwiKTsgLy8gOjo9XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBjb2xvbmVxdWFscy5zdHlcbi8vIEFsdGVybmF0ZSBuYW1lcyBmb3IgbWF0aHRvb2xzJ3MgbWFjcm9zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxyYXRpb1wiLCBcIlxcXFx2Y2VudGNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvblwiLCBcIlxcXFxkYmxjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uZXF1YWxzXCIsIFwiXFxcXGNvbG9uZXFxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY29sb25jb2xvbmVxdWFsc1wiLCBcIlxcXFxDb2xvbmVxcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGVxdWFsc2NvbG9uXCIsIFwiXFxcXGVxcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZXF1YWxzY29sb25jb2xvblwiLCBcIlxcXFxFcXFjb2xvblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9ubWludXNcIiwgXCJcXFxcY29sb25lcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25taW51c1wiLCBcIlxcXFxDb2xvbmVxXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvblwiLCBcIlxcXFxlcWNvbG9uXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludXNjb2xvbmNvbG9uXCIsIFwiXFxcXEVxY29sb25cIik7IC8vIFxcY29sb25hcHByb3ggbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25hcHByb3hcIiwgXCJcXFxcQ29sb25hcHByb3hcIik7IC8vIFxcY29sb25zaW0gbmFtZSBpcyBzYW1lIGluIG1hdGh0b29scyBhbmQgY29sb25lcXVhbHMuXG5cbmRlZmluZU1hY3JvKFwiXFxcXGNvbG9uY29sb25zaW1cIiwgXCJcXFxcQ29sb25zaW1cIik7IC8vIEFkZGl0aW9uYWwgbWFjcm9zLCBpbXBsZW1lbnRlZCBieSBhbmFsb2d5IHdpdGggbWF0aHRvb2xzIGRlZmluaXRpb25zOlxuXG5kZWZpbmVNYWNybyhcIlxcXFxzaW1jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXHZjZW50Y29sb259XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc2ltY29sb25jb2xvblwiLCBcIlxcXFxtYXRocmVse1xcXFxzaW1cXFxcbWF0aHJlbHtcXFxcbWtlcm4tMS4ybXV9XFxcXGRibGNvbG9ufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFwcHJveGNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcdmNlbnRjb2xvbn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxhcHByb3hjb2xvbmNvbG9uXCIsIFwiXFxcXG1hdGhyZWx7XFxcXGFwcHJveFxcXFxtYXRocmVse1xcXFxta2Vybi0xLjJtdX1cXFxcZGJsY29sb259XCIpOyAvLyBQcmVzZW50IGluIG5ld3R4bWF0aCwgcHhmb250cyBhbmQgdHhmb250c1xuXG5kZWZpbmVNYWNybyhcIlxcXFxub3RuaVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcbm90XFxcXG5pfXtcXFxcbWF0aHJlbHtcXFxcY2hhcmBcXHUyMjBDfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1zdXBcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLHN1cH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsaW1pbmZcIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntsaW1cXFxcLGluZn1cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEZyb20gYW1zb3BuLnN0eVxuXG5kZWZpbmVNYWNybyhcIlxcXFxpbmpsaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntpbmpcXFxcLGxpbX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwcm9qbGltXCIsIFwiXFxcXERPVFNCXFxcXG9wZXJhdG9ybmFtZSp7cHJvalxcXFwsbGltfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmxpbXN1cFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFxvdmVybGluZXtsaW19fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHZhcmxpbWluZlwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcmxpbmV7bGltfX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJpbmpsaW1cIiwgXCJcXFxcRE9UU0JcXFxcb3BlcmF0b3JuYW1lKntcXFxcdW5kZXJyaWdodGFycm93e2xpbX19XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFycHJvamxpbVwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe1xcXFx1bmRlcmxlZnRhcnJvd3tsaW19fVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gTWF0aE1MIGFsdGVybmF0ZXMgZm9yIEthVGVYIGdseXBocyBpbiB0aGUgVW5pY29kZSBwcml2YXRlIGFyZWFcblxuZGVmaW5lTWFjcm8oXCJcXFxcZ3ZlcnRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAZ3ZlcnRuZXFxfXtcXHUyMjY5fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGx2ZXJ0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQGx2ZXJ0bmVxcX17XFx1MjI2OH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuZ2VxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5nZXFxfXtcXHUyMjcxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5nZXFzbGFudFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5nZXFzbGFudH17XFx1MjI3MX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxubGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5sZXFxfXtcXHUyMjcwfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5sZXFzbGFudFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5sZXFzbGFudH17XFx1MjI3MH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc2hvcnRtaWRcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBuc2hvcnRtaWR9e+KIpH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxuc2hvcnRwYXJhbGxlbFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zaG9ydHBhcmFsbGVsfXviiKZ9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnN1YnNldGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zdWJzZXRlcXF9e1xcdTIyODh9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbnN1cHNldGVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQG5zdXBzZXRlcXF9e1xcdTIyODl9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vic2V0bmVxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vic2V0bmVxfXviiop9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdmFyc3Vic2V0bmVxcVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcXFxcQHZhcnN1YnNldG5lcXF9e+Kri31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdXBzZXRuZXFcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEB2YXJzdXBzZXRuZXF9e+KKi31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx2YXJzdXBzZXRuZXFxXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAdmFyc3Vwc2V0bmVxcX174quMfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGltYXRoXCIsIFwiXFxcXGh0bWxAbWF0aG1se1xcXFxAaW1hdGh9e1xcdTAxMzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcam1hdGhcIiwgXCJcXFxcaHRtbEBtYXRobWx7XFxcXEBqbWF0aH17XFx1MDIzN31cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0bWFyeXJkIGFuZCBzZW1hbnRpY1xuLy8gVGhlIHN0bWFyeXJkIGFuZCBzZW1hbnRpYyBwYWNrYWdlcyByZW5kZXIgdGhlIG5leHQgZm91ciBpdGVtcyBieSBjYWxsaW5nIGFcbi8vIGdseXBoLiBUaG9zZSBnbHlwaHMgZG8gbm90IGV4aXN0IGluIHRoZSBLYVRlWCBmb250cy4gSGVuY2UgdGhlIG1hY3Jvcy5cblxuZGVmaW5lTWFjcm8oXCJcXFxcbGxicmFja2V0XCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aG9wZW57W1xcXFxta2Vybi0zLjJtdVt9fVwiICsgXCJ7XFxcXG1hdGhvcGVue1xcXFxjaGFyYFxcdTI3ZTZ9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJyYnJhY2tldFwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhjbG9zZXtdXFxcXG1rZXJuLTMuMm11XX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI3ZTd9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1MjdlNlwiLCBcIlxcXFxsbGJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBbXG5cbmRlZmluZU1hY3JvKFwiXFx1MjdlN1wiLCBcIlxcXFxycmJyYWNrZXRcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCBdXG5cbmRlZmluZU1hY3JvKFwiXFxcXGxCcmFjZVwiLCBcIlxcXFxodG1sQG1hdGhtbHtcIiArIFwiXFxcXG1hdGhvcGVue1xcXFx7XFxcXG1rZXJuLTMuMm11W319XCIgKyBcIntcXFxcbWF0aG9wZW57XFxcXGNoYXJgXFx1Mjk4M319XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcckJyYWNlXCIsIFwiXFxcXGh0bWxAbWF0aG1se1wiICsgXCJcXFxcbWF0aGNsb3Nle11cXFxcbWtlcm4tMy4ybXVcXFxcfX19XCIgKyBcIntcXFxcbWF0aGNsb3Nle1xcXFxjaGFyYFxcdTI5ODR9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFx1Mjk4M1wiLCBcIlxcXFxsQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB7XG5cbmRlZmluZU1hY3JvKFwiXFx1Mjk4NFwiLCBcIlxcXFxyQnJhY2VcIik7IC8vIGJsYWNrYm9hcmQgYm9sZCB9XG4vLyBUT0RPOiBDcmVhdGUgdmFyaWFibGUgc2l6ZWQgdmVyc2lvbnMgb2YgdGhlIGxhc3QgdHdvIGl0ZW1zLiBJIGJlbGlldmUgdGhhdFxuLy8gd2lsbCByZXF1aXJlIG5ldyBmb250IGdseXBocy5cbi8vIFRoZSBzdG1hcnlyZCBmdW5jdGlvbiBgXFxtaW51c29gIHByb3ZpZGVzIGEgXCJQbGltc29sbFwiIHN5bWJvbCB0aGF0XG4vLyBzdXBlcmltcG9zZXMgdGhlIGNoYXJhY3RlcnMgXFxjaXJjIGFuZCBcXG1hdGhtaW51cy4gVXNlZCBpbiBjaGVtaXN0cnkuXG5cbmRlZmluZU1hY3JvKFwiXFxcXG1pbnVzb1wiLCBcIlxcXFxtYXRoYmlue1xcXFxodG1sQG1hdGhtbHtcIiArIFwie1xcXFxtYXRocmxhcHtcXFxcbWF0aGNob2ljZXtcXFxca2VybnswLjE0NWVtfX17XFxcXGtlcm57MC4xNDVlbX19XCIgKyBcIntcXFxca2VybnswLjEwMTVlbX19e1xcXFxrZXJuezAuMDcyNWVtfX1cXFxcY2lyY317LX19fVwiICsgXCJ7XFxcXGNoYXJg4qa1fX1cIik7XG5kZWZpbmVNYWNybyhcIuKmtVwiLCBcIlxcXFxtaW51c29cIik7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHRleHZjLnN0eVxuLy8gVGhlIHRleHZjIHBhY2thZ2UgY29udGFpbnMgbWFjcm9zIGF2YWlsYWJsZSBpbiBtZWRpYXdpa2kgcGFnZXMuXG4vLyBXZSBvbWl0IHRoZSBmdW5jdGlvbnMgZGVwcmVjYXRlZCBhdFxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVscDpEaXNwbGF5aW5nX2FfZm9ybXVsYSNEZXByZWNhdGVkX3N5bnRheFxuLy8gV2UgYWxzbyBvbWl0IHRleHZjJ3MgXFxPLCB3aGljaCBjb25mbGljdHMgd2l0aCBcXHRleHR7XFxPfVxuXG5kZWZpbmVNYWNybyhcIlxcXFxkYXJyXCIsIFwiXFxcXGRvd25hcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRBcnJcIiwgXCJcXFxcRG93bmFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcRGFyclwiLCBcIlxcXFxEb3duYXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxsYW5nXCIsIFwiXFxcXGxhbmdsZVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJhbmdcIiwgXCJcXFxccmFuZ2xlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdWFyclwiLCBcIlxcXFx1cGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdUFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcVWFyclwiLCBcIlxcXFxVcGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTlwiLCBcIlxcXFxtYXRoYmJ7Tn1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSXCIsIFwiXFxcXG1hdGhiYntSfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXFpcIiwgXCJcXFxcbWF0aGJie1p9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYWxlZlwiLCBcIlxcXFxhbGVwaFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFsZWZzeW1cIiwgXCJcXFxcYWxlcGhcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxBbHBoYVwiLCBcIlxcXFxtYXRocm17QX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCZXRhXCIsIFwiXFxcXG1hdGhybXtCfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJ1bGxcIiwgXCJcXFxcYnVsbGV0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ2hpXCIsIFwiXFxcXG1hdGhybXtYfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGNsdWJzXCIsIFwiXFxcXGNsdWJzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcY251bXNcIiwgXCJcXFxcbWF0aGJie0N9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQ29tcGxleFwiLCBcIlxcXFxtYXRoYmJ7Q31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxEYWdnZXJcIiwgXCJcXFxcZGRhZ2dlclwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGRpYW1vbmRzXCIsIFwiXFxcXGRpYW1vbmRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZW1wdHlcIiwgXCJcXFxcZW1wdHlzZXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxFcHNpbG9uXCIsIFwiXFxcXG1hdGhybXtFfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEV0YVwiLCBcIlxcXFxtYXRocm17SH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxleGlzdFwiLCBcIlxcXFxleGlzdHNcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaEFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEhhcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxoZWFydHNcIiwgXCJcXFxcaGVhcnRzdWl0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaW1hZ2VcIiwgXCJcXFxcSW1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxpbmZpblwiLCBcIlxcXFxpbmZ0eVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXElvdGFcIiwgXCJcXFxcbWF0aHJte0l9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcaXNpblwiLCBcIlxcXFxpblwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXEthcHBhXCIsIFwiXFxcXG1hdGhybXtLfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxhcnJcIiwgXCJcXFxcbGVmdGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbEFyclwiLCBcIlxcXFxMZWZ0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMYXJyXCIsIFwiXFxcXExlZnRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGxyYXJyXCIsIFwiXFxcXGxlZnRyaWdodGFycm93XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbHJBcnJcIiwgXCJcXFxcTGVmdHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxMcmFyclwiLCBcIlxcXFxMZWZ0cmlnaHRhcnJvd1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXE11XCIsIFwiXFxcXG1hdGhybXtNfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG5hdG51bXNcIiwgXCJcXFxcbWF0aGJie059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcTnVcIiwgXCJcXFxcbWF0aHJte059XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcT21pY3JvblwiLCBcIlxcXFxtYXRocm17T31cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwbHVzbW5cIiwgXCJcXFxccG1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyYXJyXCIsIFwiXFxcXHJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyQXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxSYXJyXCIsIFwiXFxcXFJpZ2h0YXJyb3dcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWFsXCIsIFwiXFxcXFJlXCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmVhbHNcIiwgXCJcXFxcbWF0aGJie1J9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcUmhvXCIsIFwiXFxcXG1hdGhybXtQfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNkb3RcIiwgXCJcXFxcY2RvdFwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNlY3RcIiwgXCJcXFxcU1wiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNwYWRlc1wiLCBcIlxcXFxzcGFkZXN1aXRcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxzdWJcIiwgXCJcXFxcc3Vic2V0XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcc3ViZVwiLCBcIlxcXFxzdWJzZXRlcVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHN1cGVcIiwgXCJcXFxcc3Vwc2V0ZXFcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxUYXVcIiwgXCJcXFxcbWF0aHJte1R9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGhldGFzeW1cIiwgXCJcXFxcdmFydGhldGFcIik7IC8vIFRPRE86IGRlZmluZU1hY3JvKFwiXFxcXHZhcmNvcHBhXCIsIFwiXFxcXFxcbWJveHtcXFxcY29wcGF9XCIpO1xuXG5kZWZpbmVNYWNybyhcIlxcXFx3ZWllcnBcIiwgXCJcXFxcd3BcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxaZXRhXCIsIFwiXFxcXG1hdGhybXtafVwiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gc3RhdG1hdGguc3R5XG4vLyBodHRwczovL2N0YW4ubWF0aC5pbGxpbm9pcy5lZHUvbWFjcm9zL2xhdGV4L2NvbnRyaWIvc3RhdG1hdGgvc3RhdG1hdGgucGRmXG5cbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21pblwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWlufVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGFyZ21heFwiLCBcIlxcXFxET1RTQlxcXFxvcGVyYXRvcm5hbWUqe2FyZ1xcXFwsbWF4fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBsaW1cIiwgXCJcXFxcRE9UU0JcXFxcbWF0aG9we1xcXFxvcGVyYXRvcm5hbWV7cGxpbX19XFxcXGxpbWl0c1wiKTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYnJha2V0LnN0eVxuLy8gaHR0cDovL2N0YW4ubWF0aC53YXNoaW5ndG9uLmVkdS90ZXgtYXJjaGl2ZS9tYWNyb3MvbGF0ZXgvY29udHJpYi9icmFrZXQvYnJha2V0LnBkZlxuXG5kZWZpbmVNYWNybyhcIlxcXFxicmFcIiwgXCJcXFxcbWF0aGlubmVye1xcXFxsYW5nbGV7IzF9fH1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxrZXRcIiwgXCJcXFxcbWF0aGlubmVye3x7IzF9XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxicmFrZXRcIiwgXCJcXFxcbWF0aGlubmVye1xcXFxsYW5nbGV7IzF9XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxCcmFcIiwgXCJcXFxcbGVmdFxcXFxsYW5nbGUjMVxcXFxyaWdodHxcIik7XG5kZWZpbmVNYWNybyhcIlxcXFxLZXRcIiwgXCJcXFxcbGVmdHwjMVxcXFxyaWdodFxcXFxyYW5nbGVcIik7XG5cbnZhciBicmFrZXRIZWxwZXIgPSBvbmUgPT4gY29udGV4dCA9PiB7XG4gIHZhciBsZWZ0ID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgbWlkZGxlID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgbWlkZGxlRG91YmxlID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgcmlnaHQgPSBjb250ZXh0LmNvbnN1bWVBcmcoKS50b2tlbnM7XG4gIHZhciBvbGRNaWRkbGUgPSBjb250ZXh0Lm1hY3Jvcy5nZXQoXCJ8XCIpO1xuICB2YXIgb2xkTWlkZGxlRG91YmxlID0gY29udGV4dC5tYWNyb3MuZ2V0KFwiXFxcXHxcIik7XG4gIGNvbnRleHQubWFjcm9zLmJlZ2luR3JvdXAoKTtcblxuICB2YXIgbWlkTWFjcm8gPSBkb3VibGUgPT4gY29udGV4dCA9PiB7XG4gICAgaWYgKG9uZSkge1xuICAgICAgLy8gT25seSBtb2RpZnkgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHwgb3IgXFx8XG4gICAgICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJ8XCIsIG9sZE1pZGRsZSk7XG5cbiAgICAgIGlmIChtaWRkbGVEb3VibGUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRleHQubWFjcm9zLnNldChcIlxcXFx8XCIsIG9sZE1pZGRsZURvdWJsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRvdWJsZWQgPSBkb3VibGU7XG5cbiAgICBpZiAoIWRvdWJsZSAmJiBtaWRkbGVEb3VibGUubGVuZ3RoKSB7XG4gICAgICAvLyBNaW1pYyBcXEBpZm5leHRjaGFyXG4gICAgICB2YXIgbmV4dFRva2VuID0gY29udGV4dC5mdXR1cmUoKTtcblxuICAgICAgaWYgKG5leHRUb2tlbi50ZXh0ID09PSBcInxcIikge1xuICAgICAgICBjb250ZXh0LnBvcFRva2VuKCk7XG4gICAgICAgIGRvdWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRvdWJsZWQgPyBtaWRkbGVEb3VibGUgOiBtaWRkbGUsXG4gICAgICBudW1BcmdzOiAwXG4gICAgfTtcbiAgfTtcblxuICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJ8XCIsIG1pZE1hY3JvKGZhbHNlKSk7XG5cbiAgaWYgKG1pZGRsZURvdWJsZS5sZW5ndGgpIHtcbiAgICBjb250ZXh0Lm1hY3Jvcy5zZXQoXCJcXFxcfFwiLCBtaWRNYWNybyh0cnVlKSk7XG4gIH1cblxuICB2YXIgYXJnID0gY29udGV4dC5jb25zdW1lQXJnKCkudG9rZW5zO1xuICB2YXIgZXhwYW5kZWQgPSBjb250ZXh0LmV4cGFuZFRva2VucyhbLi4ucmlnaHQsIC4uLmFyZywgLi4ubGVmdCAvLyByZXZlcnNlZFxuICBdKTtcbiAgY29udGV4dC5tYWNyb3MuZW5kR3JvdXAoKTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbnM6IGV4cGFuZGVkLnJldmVyc2UoKSxcbiAgICBudW1BcmdzOiAwXG4gIH07XG59O1xuXG5kZWZpbmVNYWNybyhcIlxcXFxicmFAa2V0XCIsIGJyYWtldEhlbHBlcihmYWxzZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYnJhQHNldFwiLCBicmFrZXRIZWxwZXIodHJ1ZSkpO1xuZGVmaW5lTWFjcm8oXCJcXFxcQnJha2V0XCIsIFwiXFxcXGJyYUBrZXR7XFxcXGxlZnRcXFxcbGFuZ2xlfVwiICsgXCJ7XFxcXCxcXFxcbWlkZGxlXFxcXHZlcnRcXFxcLH17XFxcXCxcXFxcbWlkZGxlXFxcXHZlcnRcXFxcLH17XFxcXHJpZ2h0XFxcXHJhbmdsZX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxTZXRcIiwgXCJcXFxcYnJhQHNldHtcXFxcbGVmdFxcXFx7XFxcXDp9XCIgKyBcIntcXFxcO1xcXFxtaWRkbGVcXFxcdmVydFxcXFw7fXtcXFxcO1xcXFxtaWRkbGVcXFxcVmVydFxcXFw7fXtcXFxcOlxcXFxyaWdodFxcXFx9fVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHNldFwiLCBcIlxcXFxicmFAc2V0e1xcXFx7XFxcXCx9e1xcXFxtaWR9e317XFxcXCxcXFxcfX1cIik7IC8vIGhhcyBubyBzdXBwb3J0IGZvciBzcGVjaWFsIHx8IG9yIFxcfFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gYWN0dWFyaWFsYW5nbGUuZHR4XG5cbmRlZmluZU1hY3JvKFwiXFxcXGFuZ2xuXCIsIFwie1xcXFxhbmdsIG59XCIpOyAvLyBDdXN0b20gS2hhbiBBY2FkZW15IGNvbG9ycywgc2hvdWxkIGJlIG1vdmVkIHRvIGFuIG9wdGlvbmFsIHBhY2thZ2VcblxuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG9yYW5nZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmE1MDB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHBpbmtcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmYwMGFmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmVlblwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMyOGFlN2J9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlcIiwgXCJcXFxcdGV4dGNvbG9ye2dyYXl9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2NjZmFmZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjODBmNmZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxibHVlQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGJsdWVEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzExYWNjZH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcYmx1ZUVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMGM3Zjk5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxCXCIsIFwiXFxcXHRleHRjb2xvcnsjIzI2ZWRkNX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcdGVhbENcIiwgXCJcXFxcdGV4dGNvbG9yeyMjMDFkMWMxfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFx0ZWFsRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHRlYWxFXCIsIFwiXFxcXHRleHRjb2xvcnsjIzIwODE3MH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5BXCIsIFwiXFxcXHRleHRjb2xvcnsjI2I2ZmZiMH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5CXCIsIFwiXFxcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5DXCIsIFwiXFxcXHRleHRjb2xvcnsjIzc0Y2Y3MH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5EXCIsIFwiXFxcXHRleHRjb2xvcnsjIzFmYWI1NH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JlZW5FXCIsIFwiXFxcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmZkMGE5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmJiNzF9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdvbGRDXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ29sZERcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZTA3ZDEwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxnb2xkRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNhNzVhMDV9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZEFcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRCXCIsIFwiXFxcXHRleHRjb2xvcnsjI2ZmODQ4Mn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccmVkQ1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmOTY4NWR9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHJlZERcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxyZWRFXCIsIFwiXFxcXHRleHRjb2xvcnsjI2JjMjYxMn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uQVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNmZmJkZTB9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtYXJvb25DXCIsIFwiXFxcXHRleHRjb2xvcnsjI2VkNWZhNn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWFyb29uRFwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNjYTMzN2N9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1hcm9vbkVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2RkZDdmZn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlQlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyNjNmI5ZmN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXHB1cnBsZUNcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxwdXJwbGVEXCIsIFwiXFxcXHRleHRjb2xvcnsjIzc4NTRhYn17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxccHVycGxlRVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM1NDNiNzh9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXG1pbnRBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcbWludEJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZWRmMmRmfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxtaW50Q1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlMGU1Y2N9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlBXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUJcIiwgXCJcXFxcdGV4dGNvbG9yeyMjZjBmMWYyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5Q1wiLCBcIlxcXFx0ZXh0Y29sb3J7IyNlM2U1ZTZ9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlEXCIsIFwiXFxcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUVcIiwgXCJcXFxcdGV4dGNvbG9yeyMjYmFiZWMyfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5RlwiLCBcIlxcXFx0ZXh0Y29sb3J7IyM4ODhkOTN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGdyYXlHXCIsIFwiXFxcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9XCIpO1xuZGVmaW5lTWFjcm8oXCJcXFxcZ3JheUhcIiwgXCJcXFxcdGV4dGNvbG9yeyMjM2IzZTQwfXsjMX1cIik7XG5kZWZpbmVNYWNybyhcIlxcXFxncmF5SVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMyMTI0MmN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGthQmx1ZVwiLCBcIlxcXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfVwiKTtcbmRlZmluZU1hY3JvKFwiXFxcXGthR3JlZW5cIiwgXCJcXFxcdGV4dGNvbG9yeyMjNzFCMzA3fXsjMX1cIik7XG5cbi8qKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSDigJxndWxsZXTigJ0gd2hlcmUgbWFjcm9zIGFyZSBleHBhbmRlZFxuICogdW50aWwgb25seSBub24tbWFjcm8gdG9rZW5zIHJlbWFpbi5cbiAqL1xuLy8gTGlzdCBvZiBjb21tYW5kcyB0aGF0IGFjdCBsaWtlIG1hY3JvcyBidXQgYXJlbid0IGRlZmluZWQgYXMgYSBtYWNybyxcbi8vIGZ1bmN0aW9uLCBvciBzeW1ib2wuICBVc2VkIGluIGBpc0RlZmluZWRgLlxudmFyIGltcGxpY2l0Q29tbWFuZHMgPSB7XG4gIFwiXlwiOiB0cnVlLFxuICAvLyBQYXJzZXIuanNcbiAgXCJfXCI6IHRydWUsXG4gIC8vIFBhcnNlci5qc1xuICBcIlxcXFxsaW1pdHNcIjogdHJ1ZSxcbiAgLy8gUGFyc2VyLmpzXG4gIFwiXFxcXG5vbGltaXRzXCI6IHRydWUgLy8gUGFyc2VyLmpzXG5cbn07XG5jbGFzcyBNYWNyb0V4cGFuZGVyIHtcbiAgY29uc3RydWN0b3IoaW5wdXQsIHNldHRpbmdzLCBtb2RlKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHZvaWQgMDtcbiAgICB0aGlzLmV4cGFuc2lvbkNvdW50ID0gdm9pZCAwO1xuICAgIHRoaXMubGV4ZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5tYWNyb3MgPSB2b2lkIDA7XG4gICAgdGhpcy5zdGFjayA9IHZvaWQgMDtcbiAgICB0aGlzLm1vZGUgPSB2b2lkIDA7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQgPSAwO1xuICAgIHRoaXMuZmVlZChpbnB1dCk7IC8vIE1ha2UgbmV3IGdsb2JhbCBuYW1lc3BhY2VcblxuICAgIHRoaXMubWFjcm9zID0gbmV3IE5hbWVzcGFjZShtYWNyb3MsIHNldHRpbmdzLm1hY3Jvcyk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YWNrID0gW107IC8vIGNvbnRhaW5zIHRva2VucyBpbiBSRVZFUlNFIG9yZGVyXG4gIH1cbiAgLyoqXG4gICAqIEZlZWQgYSBuZXcgaW5wdXQgc3RyaW5nIHRvIHRoZSBzYW1lIE1hY3JvRXhwYW5kZXJcbiAgICogKHdpdGggZXhpc3RpbmcgbWFjcm9zIGV0Yy4pLlxuICAgKi9cblxuXG4gIGZlZWQoaW5wdXQpIHtcbiAgICB0aGlzLmxleGVyID0gbmV3IExleGVyKGlucHV0LCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuICAvKipcbiAgICogU3dpdGNoZXMgYmV0d2VlbiBcInRleHRcIiBhbmQgXCJtYXRoXCIgbW9kZXMuXG4gICAqL1xuXG5cbiAgc3dpdGNoTW9kZShuZXdNb2RlKSB7XG4gICAgdGhpcy5tb2RlID0gbmV3TW9kZTtcbiAgfVxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgZ3JvdXAgbmVzdGluZyB3aXRoaW4gYWxsIG5hbWVzcGFjZXMuXG4gICAqL1xuXG5cbiAgYmVnaW5Hcm91cCgpIHtcbiAgICB0aGlzLm1hY3Jvcy5iZWdpbkdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IGdyb3VwIG5lc3Rpbmcgd2l0aGluIGFsbCBuYW1lc3BhY2VzLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwKCkge1xuICAgIHRoaXMubWFjcm9zLmVuZEdyb3VwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuZHMgYWxsIGN1cnJlbnRseSBuZXN0ZWQgZ3JvdXBzIChpZiBhbnkpLCByZXN0b3JpbmcgdmFsdWVzIGJlZm9yZSB0aGVcbiAgICogZ3JvdXBzIGJlZ2FuLiAgVXNlZnVsIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIG1pZGRsZSBvZiBwYXJzaW5nLlxuICAgKi9cblxuXG4gIGVuZEdyb3VwcygpIHtcbiAgICB0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wbW9zdCB0b2tlbiBvbiB0aGUgc3RhY2ssIHdpdGhvdXQgZXhwYW5kaW5nIGl0LlxuICAgKiBTaW1pbGFyIGluIGJlaGF2aW9yIHRvIFRlWCdzIGBcXGZ1dHVyZWxldGAuXG4gICAqL1xuXG5cbiAgZnV0dXJlKCkge1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIG5leHQgdW5leHBhbmRlZCB0b2tlbi5cbiAgICovXG5cblxuICBwb3BUb2tlbigpIHtcbiAgICB0aGlzLmZ1dHVyZSgpOyAvLyBlbnN1cmUgbm9uLWVtcHR5IHN0YWNrXG5cbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgZ2l2ZW4gdG9rZW4gdG8gdGhlIHRva2VuIHN0YWNrLiAgSW4gcGFydGljdWxhciwgdGhpcyBnZXQgYmUgdXNlZFxuICAgKiB0byBwdXQgYmFjayBhIHRva2VuIHJldHVybmVkIGZyb20gb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbih0b2tlbikge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0b2tlbik7XG4gIH1cbiAgLyoqXG4gICAqIEFwcGVuZCBhbiBhcnJheSBvZiB0b2tlbnMgdG8gdGhlIHRva2VuIHN0YWNrLlxuICAgKi9cblxuXG4gIHB1c2hUb2tlbnModG9rZW5zKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKC4uLnRva2Vucyk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmQgYW4gbWFjcm8gYXJndW1lbnQgd2l0aG91dCBleHBhbmRpbmcgdG9rZW5zIGFuZCBhcHBlbmQgdGhlIGFycmF5IG9mXG4gICAqIHRva2VucyB0byB0aGUgdG9rZW4gc3RhY2suIFVzZXMgVG9rZW4gYXMgYSBjb250YWluZXIgZm9yIHRoZSByZXN1bHQuXG4gICAqL1xuXG5cbiAgc2NhbkFyZ3VtZW50KGlzT3B0aW9uYWwpIHtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgdG9rZW5zO1xuXG4gICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpOyAvLyBcXEBpZm5leHRjaGFyIGdvYmJsZXMgYW55IHNwYWNlIGZvbGxvd2luZyBpdFxuXG4gICAgICBpZiAodGhpcy5mdXR1cmUoKS50ZXh0ICE9PSBcIltcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc3RhcnQgPSB0aGlzLnBvcFRva2VuKCk7IC8vIGRvbid0IGluY2x1ZGUgWyBpbiB0b2tlbnNcblxuICAgICAgKHtcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoW1wiXVwiXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoe1xuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmRcbiAgICAgIH0gPSB0aGlzLmNvbnN1bWVBcmcoKSk7XG4gICAgfSAvLyBpbmRpY2F0ZSB0aGUgZW5kIG9mIGFuIGFyZ3VtZW50XG5cblxuICAgIHRoaXMucHVzaFRva2VuKG5ldyBUb2tlbihcIkVPRlwiLCBlbmQubG9jKSk7XG4gICAgdGhpcy5wdXNoVG9rZW5zKHRva2Vucyk7XG4gICAgcmV0dXJuIHN0YXJ0LnJhbmdlKGVuZCwgXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgYWxsIGZvbGxvd2luZyBzcGFjZSB0b2tlbnMsIHdpdGhvdXQgZXhwYW5zaW9uLlxuICAgKi9cblxuXG4gIGNvbnN1bWVTcGFjZXMoKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIHRva2VuID0gdGhpcy5mdXR1cmUoKTtcblxuICAgICAgaWYgKHRva2VuLnRleHQgPT09IFwiIFwiKSB7XG4gICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgYW4gYXJndW1lbnQgZnJvbSB0aGUgdG9rZW4gc3RyZWFtLCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgYXJyYXlcbiAgICogb2YgdG9rZW5zIGFuZCBzdGFydC9lbmQgdG9rZW4uXG4gICAqL1xuXG5cbiAgY29uc3VtZUFyZyhkZWxpbXMpIHtcbiAgICAvLyBUaGUgYXJndW1lbnQgZm9yIGEgZGVsaW1pdGVkIHBhcmFtZXRlciBpcyB0aGUgc2hvcnRlc3QgKHBvc3NpYmx5XG4gICAgLy8gZW1wdHkpIHNlcXVlbmNlIG9mIHRva2VucyB3aXRoIHByb3Blcmx5IG5lc3RlZCB7Li4ufSBncm91cHMgdGhhdCBpc1xuICAgIC8vIGZvbGxvd2VkIC4uLiBieSB0aGlzIHBhcnRpY3VsYXIgbGlzdCBvZiBub24tcGFyYW1ldGVyIHRva2Vucy5cbiAgICAvLyBUaGUgYXJndW1lbnQgZm9yIGFuIHVuZGVsaW1pdGVkIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBub25ibGFua1xuICAgIC8vIHRva2VuLCB1bmxlc3MgdGhhdCB0b2tlbiBpcyDigJh74oCZLCB3aGVuIHRoZSBhcmd1bWVudCB3aWxsIGJlIHRoZVxuICAgIC8vIGVudGlyZSB7Li4ufSBncm91cCB0aGF0IGZvbGxvd3MuXG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciBpc0RlbGltaXRlZCA9IGRlbGltcyAmJiBkZWxpbXMubGVuZ3RoID4gMDtcblxuICAgIGlmICghaXNEZWxpbWl0ZWQpIHtcbiAgICAgIC8vIElnbm9yZSBzcGFjZXMgYmV0d2VlbiBhcmd1bWVudHMuICBBcyB0aGUgVGVYYm9vayBzYXlzOlxuICAgICAgLy8gXCJBZnRlciB5b3UgaGF2ZSBzYWlkIOKAmFxcZGVmXFxyb3cjMSMyey4uLn3igJksIHlvdSBhcmUgYWxsb3dlZCB0b1xuICAgICAgLy8gIHB1dCBzcGFjZXMgYmV0d2VlbiB0aGUgYXJndW1lbnRzIChlLmcuLCDigJhcXHJvdyB4IG7igJkpLCBiZWNhdXNlXG4gICAgICAvLyAgVGVYIGRvZXNu4oCZdCB1c2Ugc2luZ2xlIHNwYWNlcyBhcyB1bmRlbGltaXRlZCBhcmd1bWVudHMuXCJcbiAgICAgIHRoaXMuY29uc3VtZVNwYWNlcygpO1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IHRoaXMuZnV0dXJlKCk7XG4gICAgdmFyIHRvaztcbiAgICB2YXIgZGVwdGggPSAwO1xuICAgIHZhciBtYXRjaCA9IDA7XG5cbiAgICBkbyB7XG4gICAgICB0b2sgPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgICB0b2tlbnMucHVzaCh0b2spO1xuXG4gICAgICBpZiAodG9rLnRleHQgPT09IFwie1wiKSB7XG4gICAgICAgICsrZGVwdGg7XG4gICAgICB9IGVsc2UgaWYgKHRvay50ZXh0ID09PSBcIn1cIikge1xuICAgICAgICAtLWRlcHRoO1xuXG4gICAgICAgIGlmIChkZXB0aCA9PT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkV4dHJhIH1cIiwgdG9rKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0b2sudGV4dCA9PT0gXCJFT0ZcIikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnRcIiArIFwiLCBleHBlY3RlZCAnXCIgKyAoZGVsaW1zICYmIGlzRGVsaW1pdGVkID8gZGVsaW1zW21hdGNoXSA6IFwifVwiKSArIFwiJ1wiLCB0b2spO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVsaW1zICYmIGlzRGVsaW1pdGVkKSB7XG4gICAgICAgIGlmICgoZGVwdGggPT09IDAgfHwgZGVwdGggPT09IDEgJiYgZGVsaW1zW21hdGNoXSA9PT0gXCJ7XCIpICYmIHRvay50ZXh0ID09PSBkZWxpbXNbbWF0Y2hdKSB7XG4gICAgICAgICAgKyttYXRjaDtcblxuICAgICAgICAgIGlmIChtYXRjaCA9PT0gZGVsaW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZG9uJ3QgaW5jbHVkZSBkZWxpbXMgaW4gdG9rZW5zXG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKC1tYXRjaCwgbWF0Y2gpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGRlcHRoICE9PSAwIHx8IGlzRGVsaW1pdGVkKTsgLy8gSWYgdGhlIGFyZ3VtZW50IGZvdW5kIC4uLiBoYXMgdGhlIGZvcm0g4oCYezxuZXN0ZWQgdG9rZW5zPn3igJksXG4gICAgLy8gLi4uIHRoZSBvdXRlcm1vc3QgYnJhY2VzIGVuY2xvc2luZyB0aGUgYXJndW1lbnQgYXJlIHJlbW92ZWRcblxuXG4gICAgaWYgKHN0YXJ0LnRleHQgPT09IFwie1wiICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udGV4dCA9PT0gXCJ9XCIpIHtcbiAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgIHRva2Vucy5zaGlmdCgpO1xuICAgIH1cblxuICAgIHRva2Vucy5yZXZlcnNlKCk7IC8vIHRvIGZpdCBpbiB3aXRoIHN0YWNrIG9yZGVyXG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5zLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IHRva1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIENvbnN1bWUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgKGRlbGltaXRlZCkgYXJndW1lbnRzIGZyb20gdGhlIHRva2VuXG4gICAqIHN0cmVhbSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgYXJyYXkgb2YgYXJndW1lbnRzLlxuICAgKi9cblxuXG4gIGNvbnN1bWVBcmdzKG51bUFyZ3MsIGRlbGltaXRlcnMpIHtcbiAgICBpZiAoZGVsaW1pdGVycykge1xuICAgICAgaWYgKGRlbGltaXRlcnMubGVuZ3RoICE9PSBudW1BcmdzICsgMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyFcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWxpbXMgPSBkZWxpbWl0ZXJzWzBdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdG9rID0gdGhpcy5wb3BUb2tlbigpO1xuXG4gICAgICAgIGlmIChkZWxpbXNbaV0gIT09IHRvay50ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVc2Ugb2YgdGhlIG1hY3JvIGRvZXNuJ3QgbWF0Y2ggaXRzIGRlZmluaXRpb25cIiwgdG9rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbnVtQXJnczsgX2krKykge1xuICAgICAgYXJncy5wdXNoKHRoaXMuY29uc3VtZUFyZyhkZWxpbWl0ZXJzICYmIGRlbGltaXRlcnNbX2kgKyAxXSkudG9rZW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbiAgfVxuICAvKipcbiAgICogRXhwYW5kIHRoZSBuZXh0IHRva2VuIG9ubHkgb25jZSBpZiBwb3NzaWJsZS5cbiAgICpcbiAgICogSWYgdGhlIHRva2VuIGlzIGV4cGFuZGVkLCB0aGUgcmVzdWx0aW5nIHRva2VucyB3aWxsIGJlIHB1c2hlZCBvbnRvXG4gICAqIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyLCBhbmQgdGhlIG51bWJlciBvZiBzdWNoIHRva2VucyB3aWxsIGJlXG4gICAqIHJldHVybmVkLiAgVGhpcyBudW1iZXIgbWlnaHQgYmUgemVybyBvciBwb3NpdGl2ZS5cbiAgICpcbiAgICogSWYgbm90LCB0aGUgcmV0dXJuIHZhbHVlIGlzIGBmYWxzZWAsIGFuZCB0aGUgbmV4dCB0b2tlbiByZW1haW5zIGF0IHRoZVxuICAgKiB0b3Agb2YgdGhlIHN0YWNrLlxuICAgKlxuICAgKiBJbiBlaXRoZXIgY2FzZSwgdGhlIG5leHQgdG9rZW4gd2lsbCBiZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayxcbiAgICogb3IgdGhlIHN0YWNrIHdpbGwgYmUgZW1wdHkgKGluIGNhc2Ugb2YgZW1wdHkgZXhwYW5zaW9uXG4gICAqIGFuZCBubyBvdGhlciB0b2tlbnMpLlxuICAgKlxuICAgKiBVc2VkIHRvIGltcGxlbWVudCBgZXhwYW5kQWZ0ZXJGdXR1cmVgIGFuZCBgZXhwYW5kTmV4dFRva2VuYC5cbiAgICpcbiAgICogSWYgZXhwYW5kYWJsZU9ubHksIG9ubHkgZXhwYW5kYWJsZSB0b2tlbnMgYXJlIGV4cGFuZGVkIGFuZFxuICAgKiBhbiB1bmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZSByZXN1bHRzIGluIGFuIGVycm9yLlxuICAgKi9cblxuXG4gIGV4cGFuZE9uY2UoZXhwYW5kYWJsZU9ubHkpIHtcbiAgICB2YXIgdG9wVG9rZW4gPSB0aGlzLnBvcFRva2VuKCk7XG4gICAgdmFyIG5hbWUgPSB0b3BUb2tlbi50ZXh0O1xuICAgIHZhciBleHBhbnNpb24gPSAhdG9wVG9rZW4ubm9leHBhbmQgPyB0aGlzLl9nZXRFeHBhbnNpb24obmFtZSkgOiBudWxsO1xuXG4gICAgaWYgKGV4cGFuc2lvbiA9PSBudWxsIHx8IGV4cGFuZGFibGVPbmx5ICYmIGV4cGFuc2lvbi51bmV4cGFuZGFibGUpIHtcbiAgICAgIGlmIChleHBhbmRhYmxlT25seSAmJiBleHBhbnNpb24gPT0gbnVsbCAmJiBuYW1lWzBdID09PSBcIlxcXFxcIiAmJiAhdGhpcy5pc0RlZmluZWQobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wdXNoVG9rZW4odG9wVG9rZW4pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZXhwYW5zaW9uQ291bnQrKztcblxuICAgIGlmICh0aGlzLmV4cGFuc2lvbkNvdW50ID4gdGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiVG9vIG1hbnkgZXhwYW5zaW9uczogaW5maW5pdGUgbG9vcCBvciBcIiArIFwibmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZ1wiKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0gZXhwYW5zaW9uLnRva2VucztcbiAgICB2YXIgYXJncyA9IHRoaXMuY29uc3VtZUFyZ3MoZXhwYW5zaW9uLm51bUFyZ3MsIGV4cGFuc2lvbi5kZWxpbWl0ZXJzKTtcblxuICAgIGlmIChleHBhbnNpb24ubnVtQXJncykge1xuICAgICAgLy8gcGFzdGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIHRoZSBwbGFjZWhvbGRlcnNcbiAgICAgIHRva2VucyA9IHRva2Vucy5zbGljZSgpOyAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5XG5cbiAgICAgIGZvciAodmFyIGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIHRvayA9IHRva2Vuc1tpXTtcblxuICAgICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keVwiLCB0b2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRvayA9IHRva2Vuc1stLWldOyAvLyBuZXh0IHRva2VuIG9uIHN0YWNrXG5cbiAgICAgICAgICBpZiAodG9rLnRleHQgPT09IFwiI1wiKSB7XG4gICAgICAgICAgICAvLyAjIyDihpIgI1xuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShpICsgMSwgMSk7IC8vIGRyb3AgZmlyc3QgI1xuICAgICAgICAgIH0gZWxzZSBpZiAoL15bMS05XSQvLnRlc3QodG9rLnRleHQpKSB7XG4gICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBwbGFjZWhvbGRlciB3aXRoIHRoZSBpbmRpY2F0ZWQgYXJndW1lbnRcbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSwgMiwgLi4uYXJnc1srdG9rLnRleHQgLSAxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyXCIsIHRvayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBDb25jYXRlbmF0ZSBleHBhbnNpb24gb250byB0b3Agb2Ygc3RhY2suXG5cblxuICAgIHRoaXMucHVzaFRva2Vucyh0b2tlbnMpO1xuICAgIHJldHVybiB0b2tlbnMubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIG5leHQgdG9rZW4gb25seSBvbmNlIChpZiBwb3NzaWJsZSksIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZ1xuICAgKiB0b3AgdG9rZW4gb24gdGhlIHN0YWNrICh3aXRob3V0IHJlbW92aW5nIGFueXRoaW5nIGZyb20gdGhlIHN0YWNrKS5cbiAgICogU2ltaWxhciBpbiBiZWhhdmlvciB0byBUZVgncyBgXFxleHBhbmRhZnRlclxcZnV0dXJlbGV0YC5cbiAgICogRXF1aXZhbGVudCB0byBleHBhbmRPbmNlKCkgZm9sbG93ZWQgYnkgZnV0dXJlKCkuXG4gICAqL1xuXG5cbiAgZXhwYW5kQWZ0ZXJGdXR1cmUoKSB7XG4gICAgdGhpcy5leHBhbmRPbmNlKCk7XG4gICAgcmV0dXJuIHRoaXMuZnV0dXJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZCBmaXJzdCB0b2tlbiwgdGhlbiByZXR1cm4gZmlyc3Qgbm9uLWV4cGFuZGFibGUgdG9rZW4uXG4gICAqL1xuXG5cbiAgZXhwYW5kTmV4dFRva2VuKCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZE9uY2UoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZnVsbHkgZXhwYW5kZWRcbiAgICAgICAgdmFyIHRva2VuID0gdGhpcy5zdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIGFmdGVyIFxcbm9leHBhbmQgaXMgaW50ZXJwcmV0ZWQgYXMgaWYgaXRzIG1lYW5pbmdcbiAgICAgICAgLy8gd2VyZSDigJhcXHJlbGF44oCZXG5cbiAgICAgICAgaWYgKHRva2VuLnRyZWF0QXNSZWxheCkge1xuICAgICAgICAgIHRva2VuLnRleHQgPSBcIlxcXFxyZWxheFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgIH0gLy8gRmxvdyB1bmFibGUgdG8gZmlndXJlIG91dCB0aGF0IHRoaXMgcGF0aHdheSBpcyBpbXBvc3NpYmxlLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80ODA4XG5cblxuICAgIHRocm93IG5ldyBFcnJvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVucmVhY2hhYmxlXG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gbWFjcm8gbmFtZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZlxuICAgKiB0b2tlbnMsIG9yIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBzdWNoIG1hY3JvIGlzIGRlZmluZWQuXG4gICAqL1xuXG5cbiAgZXhwYW5kTWFjcm8obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hY3Jvcy5oYXMobmFtZSkgPyB0aGlzLmV4cGFuZFRva2VucyhbbmV3IFRva2VuKG5hbWUpXSkgOiB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gdG9rZW4gc3RyZWFtIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mXG4gICAqIHRva2Vucy4gIE5vdGUgdGhhdCB0aGUgaW5wdXQgdG9rZW5zIGFyZSBpbiByZXZlcnNlIG9yZGVyLCBidXQgdGhlXG4gICAqIG91dHB1dCB0b2tlbnMgYXJlIGluIGZvcndhcmQgb3JkZXIuXG4gICAqL1xuXG5cbiAgZXhwYW5kVG9rZW5zKHRva2Vucykge1xuICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICB2YXIgb2xkU3RhY2tMZW5ndGggPSB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgICB0aGlzLnB1c2hUb2tlbnModG9rZW5zKTtcblxuICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IG9sZFN0YWNrTGVuZ3RoKSB7XG4gICAgICAvLyBFeHBhbmQgb25seSBleHBhbmRhYmxlIHRva2Vuc1xuICAgICAgaWYgKHRoaXMuZXhwYW5kT25jZSh0cnVlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZnVsbHkgZXhwYW5kZWRcbiAgICAgICAgdmFyIHRva2VuID0gdGhpcy5zdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAodG9rZW4udHJlYXRBc1JlbGF4KSB7XG4gICAgICAgICAgLy8gdGhlIGV4cGFuc2lvbiBvZiBcXG5vZXhwYW5kIGlzIHRoZSB0b2tlbiBpdHNlbGZcbiAgICAgICAgICB0b2tlbi5ub2V4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgIHRva2VuLnRyZWF0QXNSZWxheCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0LnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IGV4cGFuZCB0aGUgZ2l2ZW4gbWFjcm8gbmFtZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcsXG4gICAqIG9yIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBzdWNoIG1hY3JvIGlzIGRlZmluZWQuXG4gICAqL1xuXG5cbiAgZXhwYW5kTWFjcm9Bc1RleHQobmFtZSkge1xuICAgIHZhciB0b2tlbnMgPSB0aGlzLmV4cGFuZE1hY3JvKG5hbWUpO1xuXG4gICAgaWYgKHRva2Vucykge1xuICAgICAgcmV0dXJuIHRva2Vucy5tYXAodG9rZW4gPT4gdG9rZW4udGV4dCkuam9pbihcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4cGFuZGVkIG1hY3JvIGFzIGEgcmV2ZXJzZWQgYXJyYXkgb2YgdG9rZW5zIGFuZCBhIG1hY3JvXG4gICAqIGFyZ3VtZW50IGNvdW50LiAgT3IgcmV0dXJucyBgbnVsbGAgaWYgbm8gc3VjaCBtYWNyby5cbiAgICovXG5cblxuICBfZ2V0RXhwYW5zaW9uKG5hbWUpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHRoaXMubWFjcm9zLmdldChuYW1lKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09IG51bGwpIHtcbiAgICAgIC8vIG1haW5seSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGhlcmVcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0gLy8gSWYgYSBzaW5nbGUgY2hhcmFjdGVyIGhhcyBhbiBhc3NvY2lhdGVkIGNhdGNvZGUgb3RoZXIgdGhhbiAxM1xuICAgIC8vIChhY3RpdmUgY2hhcmFjdGVyKSwgdGhlbiBkb24ndCBleHBhbmQgaXQuXG5cblxuICAgIGlmIChuYW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNhdGNvZGUgPSB0aGlzLmxleGVyLmNhdGNvZGVzW25hbWVdO1xuXG4gICAgICBpZiAoY2F0Y29kZSAhPSBudWxsICYmIGNhdGNvZGUgIT09IDEzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwYW5zaW9uID0gdHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIiA/IGRlZmluaXRpb24odGhpcykgOiBkZWZpbml0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBleHBhbnNpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciBudW1BcmdzID0gMDtcblxuICAgICAgaWYgKGV4cGFuc2lvbi5pbmRleE9mKFwiI1wiKSAhPT0gLTEpIHtcbiAgICAgICAgdmFyIHN0cmlwcGVkID0gZXhwYW5zaW9uLnJlcGxhY2UoLyMjL2csIFwiXCIpO1xuXG4gICAgICAgIHdoaWxlIChzdHJpcHBlZC5pbmRleE9mKFwiI1wiICsgKG51bUFyZ3MgKyAxKSkgIT09IC0xKSB7XG4gICAgICAgICAgKytudW1BcmdzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBib2R5TGV4ZXIgPSBuZXcgTGV4ZXIoZXhwYW5zaW9uLCB0aGlzLnNldHRpbmdzKTtcbiAgICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICAgIHZhciB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG5cbiAgICAgIHdoaWxlICh0b2sudGV4dCAhPT0gXCJFT0ZcIikge1xuICAgICAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgICAgICB0b2sgPSBib2R5TGV4ZXIubGV4KCk7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5yZXZlcnNlKCk7IC8vIHRvIGZpdCBpbiB3aXRoIHN0YWNrIHVzaW5nIHB1c2ggYW5kIHBvcFxuXG4gICAgICB2YXIgZXhwYW5kZWQgPSB7XG4gICAgICAgIHRva2VucyxcbiAgICAgICAgbnVtQXJnc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBleHBhbmRlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwYW5zaW9uO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbW1hbmQgaXMgY3VycmVudGx5IFwiZGVmaW5lZFwiIChoYXMgc29tZVxuICAgKiBmdW5jdGlvbmFsaXR5KSwgbWVhbmluZyB0aGF0IGl0J3MgYSBtYWNybyAoaW4gdGhlIGN1cnJlbnQgZ3JvdXApLFxuICAgKiBhIGZ1bmN0aW9uLCBhIHN5bWJvbCwgb3Igb25lIG9mIHRoZSBzcGVjaWFsIGNvbW1hbmRzIGxpc3RlZCBpblxuICAgKiBgaW1wbGljaXRDb21tYW5kc2AuXG4gICAqL1xuXG5cbiAgaXNEZWZpbmVkKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5tYWNyb3MuaGFzKG5hbWUpIHx8IGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBzeW1ib2xzLm1hdGguaGFzT3duUHJvcGVydHkobmFtZSkgfHwgc3ltYm9scy50ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpIHx8IGltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBleHBhbmRhYmxlLlxuICAgKi9cblxuXG4gIGlzRXhwYW5kYWJsZShuYW1lKSB7XG4gICAgdmFyIG1hY3JvID0gdGhpcy5tYWNyb3MuZ2V0KG5hbWUpO1xuICAgIHJldHVybiBtYWNybyAhPSBudWxsID8gdHlwZW9mIG1hY3JvID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtYWNybyA9PT0gXCJmdW5jdGlvblwiIHx8ICFtYWNyby51bmV4cGFuZGFibGUgOiBmdW5jdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgIWZ1bmN0aW9uc1tuYW1lXS5wcmltaXRpdmU7XG4gIH1cblxufVxuXG4vLyBIZWxwZXJzIGZvciBQYXJzZXIuanMgaGFuZGxpbmcgb2YgVW5pY29kZSAoc3VifHN1cGVyKXNjcmlwdCBjaGFyYWN0ZXJzLlxudmFyIHVuaWNvZGVTdWJSZWdFeCA9IC9eW+KCiuKCi+KCjOKCjeKCjuKCgOKCgeKCguKCg+KChOKCheKChuKCh+KCiOKCieKCkOKCkeKCleG1ouKxvOKCluKCl+KCmOKCmeKCkuKCmuG1o+KCm+KCnOG1pOG1peKCk+G1puG1p+G1qOG1qeG1ql0vO1xudmFyIHVTdWJzQW5kU3VwcyA9IE9iamVjdC5mcmVlemUoe1xuICAn4oKKJzogJysnLFxuICAn4oKLJzogJy0nLFxuICAn4oKMJzogJz0nLFxuICAn4oKNJzogJygnLFxuICAn4oKOJzogJyknLFxuICAn4oKAJzogJzAnLFxuICAn4oKBJzogJzEnLFxuICAn4oKCJzogJzInLFxuICAn4oKDJzogJzMnLFxuICAn4oKEJzogJzQnLFxuICAn4oKFJzogJzUnLFxuICAn4oKGJzogJzYnLFxuICAn4oKHJzogJzcnLFxuICAn4oKIJzogJzgnLFxuICAn4oKJJzogJzknLFxuICAnXFx1MjA5MCc6ICdhJyxcbiAgJ1xcdTIwOTEnOiAnZScsXG4gICdcXHUyMDk1JzogJ2gnLFxuICAnXFx1MUQ2Mic6ICdpJyxcbiAgJ1xcdTJDN0MnOiAnaicsXG4gICdcXHUyMDk2JzogJ2snLFxuICAnXFx1MjA5Nyc6ICdsJyxcbiAgJ1xcdTIwOTgnOiAnbScsXG4gICdcXHUyMDk5JzogJ24nLFxuICAnXFx1MjA5Mic6ICdvJyxcbiAgJ1xcdTIwOUEnOiAncCcsXG4gICdcXHUxRDYzJzogJ3InLFxuICAnXFx1MjA5Qic6ICdzJyxcbiAgJ1xcdTIwOUMnOiAndCcsXG4gICdcXHUxRDY0JzogJ3UnLFxuICAnXFx1MUQ2NSc6ICd2JyxcbiAgJ1xcdTIwOTMnOiAneCcsXG4gICdcXHUxRDY2JzogJ86yJyxcbiAgJ1xcdTFENjcnOiAnzrMnLFxuICAnXFx1MUQ2OCc6ICfPgScsXG4gICdcXHUxRDY5JzogJ1xcdTAzZDUnLFxuICAnXFx1MUQ2QSc6ICfPhycsXG4gICfigbonOiAnKycsXG4gICfigbsnOiAnLScsXG4gICfigbwnOiAnPScsXG4gICfigb0nOiAnKCcsXG4gICfigb4nOiAnKScsXG4gICfigbAnOiAnMCcsXG4gICfCuSc6ICcxJyxcbiAgJ8KyJzogJzInLFxuICAnwrMnOiAnMycsXG4gICfigbQnOiAnNCcsXG4gICfigbUnOiAnNScsXG4gICfigbYnOiAnNicsXG4gICfigbcnOiAnNycsXG4gICfigbgnOiAnOCcsXG4gICfigbknOiAnOScsXG4gICdcXHUxRDJDJzogJ0EnLFxuICAnXFx1MUQyRSc6ICdCJyxcbiAgJ1xcdTFEMzAnOiAnRCcsXG4gICdcXHUxRDMxJzogJ0UnLFxuICAnXFx1MUQzMyc6ICdHJyxcbiAgJ1xcdTFEMzQnOiAnSCcsXG4gICdcXHUxRDM1JzogJ0knLFxuICAnXFx1MUQzNic6ICdKJyxcbiAgJ1xcdTFEMzcnOiAnSycsXG4gICdcXHUxRDM4JzogJ0wnLFxuICAnXFx1MUQzOSc6ICdNJyxcbiAgJ1xcdTFEM0EnOiAnTicsXG4gICdcXHUxRDNDJzogJ08nLFxuICAnXFx1MUQzRSc6ICdQJyxcbiAgJ1xcdTFEM0YnOiAnUicsXG4gICdcXHUxRDQwJzogJ1QnLFxuICAnXFx1MUQ0MSc6ICdVJyxcbiAgJ1xcdTJDN0QnOiAnVicsXG4gICdcXHUxRDQyJzogJ1cnLFxuICAnXFx1MUQ0Myc6ICdhJyxcbiAgJ1xcdTFENDcnOiAnYicsXG4gICdcXHUxRDlDJzogJ2MnLFxuICAnXFx1MUQ0OCc6ICdkJyxcbiAgJ1xcdTFENDknOiAnZScsXG4gICdcXHUxREEwJzogJ2YnLFxuICAnXFx1MUQ0RCc6ICdnJyxcbiAgJ1xcdTAyQjAnOiAnaCcsXG4gICdcXHUyMDcxJzogJ2knLFxuICAnXFx1MDJCMic6ICdqJyxcbiAgJ1xcdTFENEYnOiAnaycsXG4gICdcXHUwMkUxJzogJ2wnLFxuICAnXFx1MUQ1MCc6ICdtJyxcbiAgJ1xcdTIwN0YnOiAnbicsXG4gICdcXHUxRDUyJzogJ28nLFxuICAnXFx1MUQ1Nic6ICdwJyxcbiAgJ1xcdTAyQjMnOiAncicsXG4gICdcXHUwMkUyJzogJ3MnLFxuICAnXFx1MUQ1Nyc6ICd0JyxcbiAgJ1xcdTFENTgnOiAndScsXG4gICdcXHUxRDVCJzogJ3YnLFxuICAnXFx1MDJCNyc6ICd3JyxcbiAgJ1xcdTAyRTMnOiAneCcsXG4gICdcXHUwMkI4JzogJ3knLFxuICAnXFx1MURCQic6ICd6JyxcbiAgJ1xcdTFENUQnOiAnzrInLFxuICAnXFx1MUQ1RSc6ICfOsycsXG4gICdcXHUxRDVGJzogJ860JyxcbiAgJ1xcdTFENjAnOiAnXFx1MDNkNScsXG4gICdcXHUxRDYxJzogJ8+HJyxcbiAgJ1xcdTFEQkYnOiAnzrgnXG59KTtcblxuLyogZXNsaW50IG5vLWNvbnN0YW50LWNvbmRpdGlvbjowICovXG5cbnZhciB1bmljb2RlQWNjZW50cyA9IHtcbiAgXCLMgVwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXCdcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcYWN1dGVcIlxuICB9LFxuICBcIsyAXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcYFwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxncmF2ZVwiXG4gIH0sXG4gIFwizIhcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxcXFwiXCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGRkb3RcIlxuICB9LFxuICBcIsyDXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcflwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFx0aWxkZVwiXG4gIH0sXG4gIFwizIRcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFw9XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGJhclwiXG4gIH0sXG4gIFwizIZcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFx1XCIsXG4gICAgXCJtYXRoXCI6IFwiXFxcXGJyZXZlXCJcbiAgfSxcbiAgXCLMjFwiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXHZcIixcbiAgICBcIm1hdGhcIjogXCJcXFxcY2hlY2tcIlxuICB9LFxuICBcIsyCXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcXlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxoYXRcIlxuICB9LFxuICBcIsyHXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcLlwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxkb3RcIlxuICB9LFxuICBcIsyKXCI6IHtcbiAgICBcInRleHRcIjogXCJcXFxcclwiLFxuICAgIFwibWF0aFwiOiBcIlxcXFxtYXRocmluZ1wiXG4gIH0sXG4gIFwizItcIjoge1xuICAgIFwidGV4dFwiOiBcIlxcXFxIXCJcbiAgfSxcbiAgXCLMp1wiOiB7XG4gICAgXCJ0ZXh0XCI6IFwiXFxcXGNcIlxuICB9XG59O1xudmFyIHVuaWNvZGVTeW1ib2xzID0ge1xuICBcIsOhXCI6IFwiYcyBXCIsXG4gIFwiw6BcIjogXCJhzIBcIixcbiAgXCLDpFwiOiBcImHMiFwiLFxuICBcIsefXCI6IFwiYcyIzIRcIixcbiAgXCLDo1wiOiBcImHMg1wiLFxuICBcIsSBXCI6IFwiYcyEXCIsXG4gIFwixINcIjogXCJhzIZcIixcbiAgXCLhuq9cIjogXCJhzIbMgVwiLFxuICBcIuG6sVwiOiBcImHMhsyAXCIsXG4gIFwi4bq1XCI6IFwiYcyGzINcIixcbiAgXCLHjlwiOiBcImHMjFwiLFxuICBcIsOiXCI6IFwiYcyCXCIsXG4gIFwi4bqlXCI6IFwiYcyCzIFcIixcbiAgXCLhuqdcIjogXCJhzILMgFwiLFxuICBcIuG6q1wiOiBcImHMgsyDXCIsXG4gIFwiyKdcIjogXCJhzIdcIixcbiAgXCLHoVwiOiBcImHMh8yEXCIsXG4gIFwiw6VcIjogXCJhzIpcIixcbiAgXCLHu1wiOiBcImHMisyBXCIsXG4gIFwi4biDXCI6IFwiYsyHXCIsXG4gIFwixIdcIjogXCJjzIFcIixcbiAgXCLhuIlcIjogXCJjzKfMgVwiLFxuICBcIsSNXCI6IFwiY8yMXCIsXG4gIFwixIlcIjogXCJjzIJcIixcbiAgXCLEi1wiOiBcImPMh1wiLFxuICBcIsOnXCI6IFwiY8ynXCIsXG4gIFwixI9cIjogXCJkzIxcIixcbiAgXCLhuItcIjogXCJkzIdcIixcbiAgXCLhuJFcIjogXCJkzKdcIixcbiAgXCLDqVwiOiBcImXMgVwiLFxuICBcIsOoXCI6IFwiZcyAXCIsXG4gIFwiw6tcIjogXCJlzIhcIixcbiAgXCLhur1cIjogXCJlzINcIixcbiAgXCLEk1wiOiBcImXMhFwiLFxuICBcIuG4l1wiOiBcImXMhMyBXCIsXG4gIFwi4biVXCI6IFwiZcyEzIBcIixcbiAgXCLElVwiOiBcImXMhlwiLFxuICBcIuG4nVwiOiBcImXMp8yGXCIsXG4gIFwixJtcIjogXCJlzIxcIixcbiAgXCLDqlwiOiBcImXMglwiLFxuICBcIuG6v1wiOiBcImXMgsyBXCIsXG4gIFwi4buBXCI6IFwiZcyCzIBcIixcbiAgXCLhu4VcIjogXCJlzILMg1wiLFxuICBcIsSXXCI6IFwiZcyHXCIsXG4gIFwiyKlcIjogXCJlzKdcIixcbiAgXCLhuJ9cIjogXCJmzIdcIixcbiAgXCLHtVwiOiBcImfMgVwiLFxuICBcIuG4oVwiOiBcImfMhFwiLFxuICBcIsSfXCI6IFwiZ8yGXCIsXG4gIFwix6dcIjogXCJnzIxcIixcbiAgXCLEnVwiOiBcImfMglwiLFxuICBcIsShXCI6IFwiZ8yHXCIsXG4gIFwixKNcIjogXCJnzKdcIixcbiAgXCLhuKdcIjogXCJozIhcIixcbiAgXCLIn1wiOiBcImjMjFwiLFxuICBcIsSlXCI6IFwiaMyCXCIsXG4gIFwi4bijXCI6IFwiaMyHXCIsXG4gIFwi4bipXCI6IFwiaMynXCIsXG4gIFwiw61cIjogXCJpzIFcIixcbiAgXCLDrFwiOiBcImnMgFwiLFxuICBcIsOvXCI6IFwiacyIXCIsXG4gIFwi4bivXCI6IFwiacyIzIFcIixcbiAgXCLEqVwiOiBcImnMg1wiLFxuICBcIsSrXCI6IFwiacyEXCIsXG4gIFwixK1cIjogXCJpzIZcIixcbiAgXCLHkFwiOiBcImnMjFwiLFxuICBcIsOuXCI6IFwiacyCXCIsXG4gIFwix7BcIjogXCJqzIxcIixcbiAgXCLEtVwiOiBcImrMglwiLFxuICBcIuG4sVwiOiBcImvMgVwiLFxuICBcIsepXCI6IFwia8yMXCIsXG4gIFwixLdcIjogXCJrzKdcIixcbiAgXCLEulwiOiBcImzMgVwiLFxuICBcIsS+XCI6IFwibMyMXCIsXG4gIFwixLxcIjogXCJszKdcIixcbiAgXCLhuL9cIjogXCJtzIFcIixcbiAgXCLhuYFcIjogXCJtzIdcIixcbiAgXCLFhFwiOiBcIm7MgVwiLFxuICBcIse5XCI6IFwibsyAXCIsXG4gIFwiw7FcIjogXCJuzINcIixcbiAgXCLFiFwiOiBcIm7MjFwiLFxuICBcIuG5hVwiOiBcIm7Mh1wiLFxuICBcIsWGXCI6IFwibsynXCIsXG4gIFwiw7NcIjogXCJvzIFcIixcbiAgXCLDslwiOiBcIm/MgFwiLFxuICBcIsO2XCI6IFwib8yIXCIsXG4gIFwiyKtcIjogXCJvzIjMhFwiLFxuICBcIsO1XCI6IFwib8yDXCIsXG4gIFwi4bmNXCI6IFwib8yDzIFcIixcbiAgXCLhuY9cIjogXCJvzIPMiFwiLFxuICBcIsitXCI6IFwib8yDzIRcIixcbiAgXCLFjVwiOiBcIm/MhFwiLFxuICBcIuG5k1wiOiBcIm/MhMyBXCIsXG4gIFwi4bmRXCI6IFwib8yEzIBcIixcbiAgXCLFj1wiOiBcIm/MhlwiLFxuICBcIseSXCI6IFwib8yMXCIsXG4gIFwiw7RcIjogXCJvzIJcIixcbiAgXCLhu5FcIjogXCJvzILMgVwiLFxuICBcIuG7k1wiOiBcIm/MgsyAXCIsXG4gIFwi4buXXCI6IFwib8yCzINcIixcbiAgXCLIr1wiOiBcIm/Mh1wiLFxuICBcIsixXCI6IFwib8yHzIRcIixcbiAgXCLFkVwiOiBcIm/Mi1wiLFxuICBcIuG5lVwiOiBcInDMgVwiLFxuICBcIuG5l1wiOiBcInDMh1wiLFxuICBcIsWVXCI6IFwicsyBXCIsXG4gIFwixZlcIjogXCJyzIxcIixcbiAgXCLhuZlcIjogXCJyzIdcIixcbiAgXCLFl1wiOiBcInLMp1wiLFxuICBcIsWbXCI6IFwic8yBXCIsXG4gIFwi4bmlXCI6IFwic8yBzIdcIixcbiAgXCLFoVwiOiBcInPMjFwiLFxuICBcIuG5p1wiOiBcInPMjMyHXCIsXG4gIFwixZ1cIjogXCJzzIJcIixcbiAgXCLhuaFcIjogXCJzzIdcIixcbiAgXCLFn1wiOiBcInPMp1wiLFxuICBcIuG6l1wiOiBcInTMiFwiLFxuICBcIsWlXCI6IFwidMyMXCIsXG4gIFwi4bmrXCI6IFwidMyHXCIsXG4gIFwixaNcIjogXCJ0zKdcIixcbiAgXCLDulwiOiBcInXMgVwiLFxuICBcIsO5XCI6IFwidcyAXCIsXG4gIFwiw7xcIjogXCJ1zIhcIixcbiAgXCLHmFwiOiBcInXMiMyBXCIsXG4gIFwix5xcIjogXCJ1zIjMgFwiLFxuICBcIseWXCI6IFwidcyIzIRcIixcbiAgXCLHmlwiOiBcInXMiMyMXCIsXG4gIFwixalcIjogXCJ1zINcIixcbiAgXCLhublcIjogXCJ1zIPMgVwiLFxuICBcIsWrXCI6IFwidcyEXCIsXG4gIFwi4bm7XCI6IFwidcyEzIhcIixcbiAgXCLFrVwiOiBcInXMhlwiLFxuICBcIseUXCI6IFwidcyMXCIsXG4gIFwiw7tcIjogXCJ1zIJcIixcbiAgXCLFr1wiOiBcInXMilwiLFxuICBcIsWxXCI6IFwidcyLXCIsXG4gIFwi4bm9XCI6IFwidsyDXCIsXG4gIFwi4bqDXCI6IFwid8yBXCIsXG4gIFwi4bqBXCI6IFwid8yAXCIsXG4gIFwi4bqFXCI6IFwid8yIXCIsXG4gIFwixbVcIjogXCJ3zIJcIixcbiAgXCLhuodcIjogXCJ3zIdcIixcbiAgXCLhuphcIjogXCJ3zIpcIixcbiAgXCLhuo1cIjogXCJ4zIhcIixcbiAgXCLhuotcIjogXCJ4zIdcIixcbiAgXCLDvVwiOiBcInnMgVwiLFxuICBcIuG7s1wiOiBcInnMgFwiLFxuICBcIsO/XCI6IFwiecyIXCIsXG4gIFwi4bu5XCI6IFwiecyDXCIsXG4gIFwiyLNcIjogXCJ5zIRcIixcbiAgXCLFt1wiOiBcInnMglwiLFxuICBcIuG6j1wiOiBcInnMh1wiLFxuICBcIuG6mVwiOiBcInnMilwiLFxuICBcIsW6XCI6IFwiesyBXCIsXG4gIFwixb5cIjogXCJ6zIxcIixcbiAgXCLhupFcIjogXCJ6zIJcIixcbiAgXCLFvFwiOiBcInrMh1wiLFxuICBcIsOBXCI6IFwiQcyBXCIsXG4gIFwiw4BcIjogXCJBzIBcIixcbiAgXCLDhFwiOiBcIkHMiFwiLFxuICBcIseeXCI6IFwiQcyIzIRcIixcbiAgXCLDg1wiOiBcIkHMg1wiLFxuICBcIsSAXCI6IFwiQcyEXCIsXG4gIFwixIJcIjogXCJBzIZcIixcbiAgXCLhuq5cIjogXCJBzIbMgVwiLFxuICBcIuG6sFwiOiBcIkHMhsyAXCIsXG4gIFwi4bq0XCI6IFwiQcyGzINcIixcbiAgXCLHjVwiOiBcIkHMjFwiLFxuICBcIsOCXCI6IFwiQcyCXCIsXG4gIFwi4bqkXCI6IFwiQcyCzIFcIixcbiAgXCLhuqZcIjogXCJBzILMgFwiLFxuICBcIuG6qlwiOiBcIkHMgsyDXCIsXG4gIFwiyKZcIjogXCJBzIdcIixcbiAgXCLHoFwiOiBcIkHMh8yEXCIsXG4gIFwiw4VcIjogXCJBzIpcIixcbiAgXCLHulwiOiBcIkHMisyBXCIsXG4gIFwi4biCXCI6IFwiQsyHXCIsXG4gIFwixIZcIjogXCJDzIFcIixcbiAgXCLhuIhcIjogXCJDzKfMgVwiLFxuICBcIsSMXCI6IFwiQ8yMXCIsXG4gIFwixIhcIjogXCJDzIJcIixcbiAgXCLEilwiOiBcIkPMh1wiLFxuICBcIsOHXCI6IFwiQ8ynXCIsXG4gIFwixI5cIjogXCJEzIxcIixcbiAgXCLhuIpcIjogXCJEzIdcIixcbiAgXCLhuJBcIjogXCJEzKdcIixcbiAgXCLDiVwiOiBcIkXMgVwiLFxuICBcIsOIXCI6IFwiRcyAXCIsXG4gIFwiw4tcIjogXCJFzIhcIixcbiAgXCLhurxcIjogXCJFzINcIixcbiAgXCLEklwiOiBcIkXMhFwiLFxuICBcIuG4llwiOiBcIkXMhMyBXCIsXG4gIFwi4biUXCI6IFwiRcyEzIBcIixcbiAgXCLElFwiOiBcIkXMhlwiLFxuICBcIuG4nFwiOiBcIkXMp8yGXCIsXG4gIFwixJpcIjogXCJFzIxcIixcbiAgXCLDilwiOiBcIkXMglwiLFxuICBcIuG6vlwiOiBcIkXMgsyBXCIsXG4gIFwi4buAXCI6IFwiRcyCzIBcIixcbiAgXCLhu4RcIjogXCJFzILMg1wiLFxuICBcIsSWXCI6IFwiRcyHXCIsXG4gIFwiyKhcIjogXCJFzKdcIixcbiAgXCLhuJ5cIjogXCJGzIdcIixcbiAgXCLHtFwiOiBcIkfMgVwiLFxuICBcIuG4oFwiOiBcIkfMhFwiLFxuICBcIsSeXCI6IFwiR8yGXCIsXG4gIFwix6ZcIjogXCJHzIxcIixcbiAgXCLEnFwiOiBcIkfMglwiLFxuICBcIsSgXCI6IFwiR8yHXCIsXG4gIFwixKJcIjogXCJHzKdcIixcbiAgXCLhuKZcIjogXCJIzIhcIixcbiAgXCLInlwiOiBcIkjMjFwiLFxuICBcIsSkXCI6IFwiSMyCXCIsXG4gIFwi4biiXCI6IFwiSMyHXCIsXG4gIFwi4bioXCI6IFwiSMynXCIsXG4gIFwiw41cIjogXCJJzIFcIixcbiAgXCLDjFwiOiBcIknMgFwiLFxuICBcIsOPXCI6IFwiScyIXCIsXG4gIFwi4biuXCI6IFwiScyIzIFcIixcbiAgXCLEqFwiOiBcIknMg1wiLFxuICBcIsSqXCI6IFwiScyEXCIsXG4gIFwixKxcIjogXCJJzIZcIixcbiAgXCLHj1wiOiBcIknMjFwiLFxuICBcIsOOXCI6IFwiScyCXCIsXG4gIFwixLBcIjogXCJJzIdcIixcbiAgXCLEtFwiOiBcIkrMglwiLFxuICBcIuG4sFwiOiBcIkvMgVwiLFxuICBcIseoXCI6IFwiS8yMXCIsXG4gIFwixLZcIjogXCJLzKdcIixcbiAgXCLEuVwiOiBcIkzMgVwiLFxuICBcIsS9XCI6IFwiTMyMXCIsXG4gIFwixLtcIjogXCJMzKdcIixcbiAgXCLhuL5cIjogXCJNzIFcIixcbiAgXCLhuYBcIjogXCJNzIdcIixcbiAgXCLFg1wiOiBcIk7MgVwiLFxuICBcIse4XCI6IFwiTsyAXCIsXG4gIFwiw5FcIjogXCJOzINcIixcbiAgXCLFh1wiOiBcIk7MjFwiLFxuICBcIuG5hFwiOiBcIk7Mh1wiLFxuICBcIsWFXCI6IFwiTsynXCIsXG4gIFwiw5NcIjogXCJPzIFcIixcbiAgXCLDklwiOiBcIk/MgFwiLFxuICBcIsOWXCI6IFwiT8yIXCIsXG4gIFwiyKpcIjogXCJPzIjMhFwiLFxuICBcIsOVXCI6IFwiT8yDXCIsXG4gIFwi4bmMXCI6IFwiT8yDzIFcIixcbiAgXCLhuY5cIjogXCJPzIPMiFwiLFxuICBcIsisXCI6IFwiT8yDzIRcIixcbiAgXCLFjFwiOiBcIk/MhFwiLFxuICBcIuG5klwiOiBcIk/MhMyBXCIsXG4gIFwi4bmQXCI6IFwiT8yEzIBcIixcbiAgXCLFjlwiOiBcIk/MhlwiLFxuICBcIseRXCI6IFwiT8yMXCIsXG4gIFwiw5RcIjogXCJPzIJcIixcbiAgXCLhu5BcIjogXCJPzILMgVwiLFxuICBcIuG7klwiOiBcIk/MgsyAXCIsXG4gIFwi4buWXCI6IFwiT8yCzINcIixcbiAgXCLIrlwiOiBcIk/Mh1wiLFxuICBcIsiwXCI6IFwiT8yHzIRcIixcbiAgXCLFkFwiOiBcIk/Mi1wiLFxuICBcIuG5lFwiOiBcIlDMgVwiLFxuICBcIuG5llwiOiBcIlDMh1wiLFxuICBcIsWUXCI6IFwiUsyBXCIsXG4gIFwixZhcIjogXCJSzIxcIixcbiAgXCLhuZhcIjogXCJSzIdcIixcbiAgXCLFllwiOiBcIlLMp1wiLFxuICBcIsWaXCI6IFwiU8yBXCIsXG4gIFwi4bmkXCI6IFwiU8yBzIdcIixcbiAgXCLFoFwiOiBcIlPMjFwiLFxuICBcIuG5plwiOiBcIlPMjMyHXCIsXG4gIFwixZxcIjogXCJTzIJcIixcbiAgXCLhuaBcIjogXCJTzIdcIixcbiAgXCLFnlwiOiBcIlPMp1wiLFxuICBcIsWkXCI6IFwiVMyMXCIsXG4gIFwi4bmqXCI6IFwiVMyHXCIsXG4gIFwixaJcIjogXCJUzKdcIixcbiAgXCLDmlwiOiBcIlXMgVwiLFxuICBcIsOZXCI6IFwiVcyAXCIsXG4gIFwiw5xcIjogXCJVzIhcIixcbiAgXCLHl1wiOiBcIlXMiMyBXCIsXG4gIFwix5tcIjogXCJVzIjMgFwiLFxuICBcIseVXCI6IFwiVcyIzIRcIixcbiAgXCLHmVwiOiBcIlXMiMyMXCIsXG4gIFwixahcIjogXCJVzINcIixcbiAgXCLhubhcIjogXCJVzIPMgVwiLFxuICBcIsWqXCI6IFwiVcyEXCIsXG4gIFwi4bm6XCI6IFwiVcyEzIhcIixcbiAgXCLFrFwiOiBcIlXMhlwiLFxuICBcIseTXCI6IFwiVcyMXCIsXG4gIFwiw5tcIjogXCJVzIJcIixcbiAgXCLFrlwiOiBcIlXMilwiLFxuICBcIsWwXCI6IFwiVcyLXCIsXG4gIFwi4bm8XCI6IFwiVsyDXCIsXG4gIFwi4bqCXCI6IFwiV8yBXCIsXG4gIFwi4bqAXCI6IFwiV8yAXCIsXG4gIFwi4bqEXCI6IFwiV8yIXCIsXG4gIFwixbRcIjogXCJXzIJcIixcbiAgXCLhuoZcIjogXCJXzIdcIixcbiAgXCLhuoxcIjogXCJYzIhcIixcbiAgXCLhuopcIjogXCJYzIdcIixcbiAgXCLDnVwiOiBcIlnMgVwiLFxuICBcIuG7slwiOiBcIlnMgFwiLFxuICBcIsW4XCI6IFwiWcyIXCIsXG4gIFwi4bu4XCI6IFwiWcyDXCIsXG4gIFwiyLJcIjogXCJZzIRcIixcbiAgXCLFtlwiOiBcIlnMglwiLFxuICBcIuG6jlwiOiBcIlnMh1wiLFxuICBcIsW5XCI6IFwiWsyBXCIsXG4gIFwixb1cIjogXCJazIxcIixcbiAgXCLhupBcIjogXCJazIJcIixcbiAgXCLFu1wiOiBcIlrMh1wiLFxuICBcIs6sXCI6IFwizrHMgVwiLFxuICBcIuG9sFwiOiBcIs6xzIBcIixcbiAgXCLhvrFcIjogXCLOscyEXCIsXG4gIFwi4b6wXCI6IFwizrHMhlwiLFxuICBcIs6tXCI6IFwizrXMgVwiLFxuICBcIuG9slwiOiBcIs61zIBcIixcbiAgXCLOrlwiOiBcIs63zIFcIixcbiAgXCLhvbRcIjogXCLOt8yAXCIsXG4gIFwizq9cIjogXCLOucyBXCIsXG4gIFwi4b22XCI6IFwizrnMgFwiLFxuICBcIs+KXCI6IFwizrnMiFwiLFxuICBcIs6QXCI6IFwizrnMiMyBXCIsXG4gIFwi4b+SXCI6IFwizrnMiMyAXCIsXG4gIFwi4b+RXCI6IFwizrnMhFwiLFxuICBcIuG/kFwiOiBcIs65zIZcIixcbiAgXCLPjFwiOiBcIs6/zIFcIixcbiAgXCLhvbhcIjogXCLOv8yAXCIsXG4gIFwiz41cIjogXCLPhcyBXCIsXG4gIFwi4b26XCI6IFwiz4XMgFwiLFxuICBcIs+LXCI6IFwiz4XMiFwiLFxuICBcIs6wXCI6IFwiz4XMiMyBXCIsXG4gIFwi4b+iXCI6IFwiz4XMiMyAXCIsXG4gIFwi4b+hXCI6IFwiz4XMhFwiLFxuICBcIuG/oFwiOiBcIs+FzIZcIixcbiAgXCLPjlwiOiBcIs+JzIFcIixcbiAgXCLhvbxcIjogXCLPicyAXCIsXG4gIFwizo5cIjogXCLOpcyBXCIsXG4gIFwi4b+qXCI6IFwizqXMgFwiLFxuICBcIs6rXCI6IFwizqXMiFwiLFxuICBcIuG/qVwiOiBcIs6lzIRcIixcbiAgXCLhv6hcIjogXCLOpcyGXCIsXG4gIFwizo9cIjogXCLOqcyBXCIsXG4gIFwi4b+6XCI6IFwizqnMgFwiXG59O1xuXG4vKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGFyc2VyIHVzZWQgdG8gcGFyc2Ugb3V0IGEgVGVYIGV4cHJlc3Npb24gZnJvbSB0aGVcbiAqIGlucHV0LiBTaW5jZSBUZVggaXNuJ3QgY29udGV4dC1mcmVlLCBzdGFuZGFyZCBwYXJzZXJzIGRvbid0IHdvcmsgcGFydGljdWxhcmx5XG4gKiB3ZWxsLlxuICpcbiAqIFRoZSBzdHJhdGVneSBvZiB0aGlzIHBhcnNlciBpcyBhcyBzdWNoOlxuICpcbiAqIFRoZSBtYWluIGZ1bmN0aW9ucyAodGhlIGAucGFyc2UuLi5gIG9uZXMpIHRha2UgYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICogcGFyc2Ugc3RyaW5nIHRvIHBhcnNlIHRva2VucyBmcm9tLiBUaGUgbGV4ZXIgKGZvdW5kIGluIExleGVyLmpzLCBzdG9yZWQgYXRcbiAqIHRoaXMuZ3VsbGV0LmxleGVyKSBhbHNvIHN1cHBvcnRzIHB1bGxpbmcgb3V0IHRva2VucyBhdCBhcmJpdHJhcnkgcGxhY2VzLiBXaGVuXG4gKiBpbmRpdmlkdWFsIHRva2VucyBhcmUgbmVlZGVkIGF0IGEgcG9zaXRpb24sIHRoZSBsZXhlciBpcyBjYWxsZWQgdG8gcHVsbCBvdXQgYVxuICogdG9rZW4sIHdoaWNoIGlzIHRoZW4gdXNlZC5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhcyBhIHByb3BlcnR5IGNhbGxlZCBcIm1vZGVcIiBpbmRpY2F0aW5nIHRoZSBtb2RlIHRoYXRcbiAqIHRoZSBwYXJzZXIgaXMgY3VycmVudGx5IGluLiBDdXJyZW50bHkgaXQgaGFzIHRvIGJlIG9uZSBvZiBcIm1hdGhcIiBvclxuICogXCJ0ZXh0XCIsIHdoaWNoIGRlbm90ZXMgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1hdGgteVxuICogb25lIG9yIGEgdGV4dC15IG9uZSAoZS5nLiBpbnNpZGUgXFx0ZXh0KS4gQ3VycmVudGx5LCB0aGlzIHNlcnZlcyB0b1xuICogbGltaXQgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0ZXh0IG1vZGUuXG4gKlxuICogVGhlIG1haW4gZnVuY3Rpb25zIHRoZW4gcmV0dXJuIGFuIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgdXNlZnVsIGRhdGEgdGhhdFxuICogd2FzIHBhcnNlZCBhdCBpdHMgZ2l2ZW4gcG9pbnQsIGFuZCBhIG5ldyBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZWRcbiAqIGRhdGEuIFRoZSBtYWluIGZ1bmN0aW9ucyBjYW4gY2FsbCBlYWNoIG90aGVyIGFuZCBjb250aW51ZSB0aGUgcGFyc2luZyBieVxuICogdXNpbmcgdGhlIHJldHVybmVkIHBvc2l0aW9uIGFzIGEgbmV3IHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIFRoZXJlIGFyZSBhbHNvIGV4dHJhIGAuaGFuZGxlLi4uYCBmdW5jdGlvbnMsIHdoaWNoIHB1bGwgb3V0IHNvbWUgcmV1c2VkXG4gKiBmdW5jdGlvbmFsaXR5IGludG8gc2VsZi1jb250YWluZWQgZnVuY3Rpb25zLlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIFBhcnNlTm9kZXMuXG4gKi9cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKGlucHV0LCBzZXR0aW5ncykge1xuICAgIHRoaXMubW9kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmd1bGxldCA9IHZvaWQgMDtcbiAgICB0aGlzLnNldHRpbmdzID0gdm9pZCAwO1xuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSB2b2lkIDA7XG4gICAgdGhpcy5uZXh0VG9rZW4gPSB2b2lkIDA7XG4gICAgLy8gU3RhcnQgaW4gbWF0aCBtb2RlXG4gICAgdGhpcy5tb2RlID0gXCJtYXRoXCI7IC8vIENyZWF0ZSBhIG5ldyBtYWNybyBleHBhbmRlciAoZ3VsbGV0KSBhbmQgKGluZGlyZWN0bHkgdmlhIHRoYXQpIGFsc28gYVxuICAgIC8vIG5ldyBsZXhlciAobW91dGgpIGZvciB0aGlzIHBhcnNlciAoc3RvbWFjaCwgaW4gdGhlIGxhbmd1YWdlIG9mIFRlWClcblxuICAgIHRoaXMuZ3VsbGV0ID0gbmV3IE1hY3JvRXhwYW5kZXIoaW5wdXQsIHNldHRpbmdzLCB0aGlzLm1vZGUpOyAvLyBTdG9yZSB0aGUgc2V0dGluZ3MgZm9yIHVzZSBpbiBwYXJzaW5nXG5cbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7IC8vIENvdW50IGxlZnRyaWdodCBkZXB0aCAoZm9yIFxcbWlkZGxlIGVycm9ycylcblxuICAgIHRoaXMubGVmdHJpZ2h0RGVwdGggPSAwO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgYSByZXN1bHQgdG8gbWFrZSBzdXJlIGl0IGhhcyB0aGUgcmlnaHQgdHlwZSwgYW5kIHRocm93cyBhblxuICAgKiBhcHByb3ByaWF0ZSBlcnJvciBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgZXhwZWN0KHRleHQsIGNvbnN1bWUpIHtcbiAgICBpZiAoY29uc3VtZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25zdW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZXRjaCgpLnRleHQgIT09IHRleHQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgdGV4dCArIFwiJywgZ290ICdcIiArIHRoaXMuZmV0Y2goKS50ZXh0ICsgXCInXCIsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnN1bWUpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGlzY2FyZHMgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHRva2VuLCBjb25zaWRlcmluZyBpdCBjb25zdW1lZC5cbiAgICovXG5cblxuICBjb25zdW1lKCkge1xuICAgIHRoaXMubmV4dFRva2VuID0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IGxvb2thaGVhZCB0b2tlbiwgb3IgaWYgdGhlcmUgaXNuJ3Qgb25lIChhdCB0aGVcbiAgICogYmVnaW5uaW5nLCBvciBpZiB0aGUgcHJldmlvdXMgbG9va2FoZWFkIHRva2VuIHdhcyBjb25zdW1lKClkKSxcbiAgICogZmV0Y2ggdGhlIG5leHQgdG9rZW4gYXMgdGhlIG5ldyBsb29rYWhlYWQgdG9rZW4gYW5kIHJldHVybiBpdC5cbiAgICovXG5cblxuICBmZXRjaCgpIHtcbiAgICBpZiAodGhpcy5uZXh0VG9rZW4gPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0VG9rZW4gPSB0aGlzLmd1bGxldC5leHBhbmROZXh0VG9rZW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0VG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFN3aXRjaGVzIGJldHdlZW4gXCJ0ZXh0XCIgYW5kIFwibWF0aFwiIG1vZGVzLlxuICAgKi9cblxuXG4gIHN3aXRjaE1vZGUobmV3TW9kZSkge1xuICAgIHRoaXMubW9kZSA9IG5ld01vZGU7XG4gICAgdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShuZXdNb2RlKTtcbiAgfVxuICAvKipcbiAgICogTWFpbiBwYXJzaW5nIGZ1bmN0aW9uLCB3aGljaCBwYXJzZXMgYW4gZW50aXJlIGlucHV0LlxuICAgKi9cblxuXG4gIHBhcnNlKCkge1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cCkge1xuICAgICAgLy8gQ3JlYXRlIGEgZ3JvdXAgbmFtZXNwYWNlIGZvciB0aGUgbWF0aCBleHByZXNzaW9uLlxuICAgICAgLy8gKExhVGVYIGNyZWF0ZXMgYSBuZXcgZ3JvdXAgZm9yIGV2ZXJ5ICQuLi4kLCAkJC4uLiQkLCBcXFsuLi5cXF0uKVxuICAgICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIH0gLy8gVXNlIG9sZCBcXGNvbG9yIGJlaGF2aW9yIChzYW1lIGFzIExhVGVYJ3MgXFx0ZXh0Y29sb3IpIGlmIHJlcXVlc3RlZC5cbiAgICAvLyBXZSBkbyB0aGlzIHdpdGhpbiB0aGUgZ3JvdXAgZm9yIHRoZSBtYXRoIGV4cHJlc3Npb24sIHNvIGl0IGRvZXNuJ3RcbiAgICAvLyBwb2xsdXRlIHNldHRpbmdzLm1hY3Jvcy5cblxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvcikge1xuICAgICAgdGhpcy5ndWxsZXQubWFjcm9zLnNldChcIlxcXFxjb2xvclwiLCBcIlxcXFx0ZXh0Y29sb3JcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgaW5wdXRcbiAgICAgIHZhciBwYXJzZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKGZhbHNlKTsgLy8gSWYgd2Ugc3VjY2VlZGVkLCBtYWtlIHN1cmUgdGhlcmUncyBhbiBFT0YgYXQgdGhlIGVuZFxuXG4gICAgICB0aGlzLmV4cGVjdChcIkVPRlwiKTsgLy8gRW5kIHRoZSBncm91cCBuYW1lc3BhY2UgZm9yIHRoZSBleHByZXNzaW9uXG5cbiAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cCkge1xuICAgICAgICB0aGlzLmd1bGxldC5lbmRHcm91cCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2U7IC8vIENsb3NlIGFueSBsZWZ0b3ZlciBncm91cHMgaW4gY2FzZSBvZiBhIHBhcnNlIGVycm9yLlxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmd1bGxldC5lbmRHcm91cHMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZ1bGx5IHBhcnNlIGEgc2VwYXJhdGUgc2VxdWVuY2Ugb2YgdG9rZW5zIGFzIGEgc2VwYXJhdGUgam9iLlxuICAgKiBUb2tlbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiByZXZlcnNlIG9yZGVyLCBhcyBpbiBhIE1hY3JvRGVmaW5pdGlvbi5cbiAgICovXG5cblxuICBzdWJwYXJzZSh0b2tlbnMpIHtcbiAgICAvLyBTYXZlIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIGN1cnJlbnQgam9iLlxuICAgIHZhciBvbGRUb2tlbiA9IHRoaXMubmV4dFRva2VuO1xuICAgIHRoaXMuY29uc3VtZSgpOyAvLyBSdW4gdGhlIG5ldyBqb2IsIHRlcm1pbmF0aW5nIGl0IHdpdGggYW4gZXhjZXNzICd9J1xuXG4gICAgdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBUb2tlbihcIn1cIikpO1xuICAgIHRoaXMuZ3VsbGV0LnB1c2hUb2tlbnModG9rZW5zKTtcbiAgICB2YXIgcGFyc2UgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSk7XG4gICAgdGhpcy5leHBlY3QoXCJ9XCIpOyAvLyBSZXN0b3JlIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIGN1cnJlbnQgam9iLlxuXG4gICAgdGhpcy5uZXh0VG9rZW4gPSBvbGRUb2tlbjtcbiAgICByZXR1cm4gcGFyc2U7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGFuIFwiZXhwcmVzc2lvblwiLCB3aGljaCBpcyBhIGxpc3Qgb2YgYXRvbXMuXG4gICAqXG4gICAqIGBicmVha09uSW5maXhgOiBTaG91bGQgdGhlIHBhcnNpbmcgc3RvcCB3aGVuIHdlIGhpdCBpbmZpeCBub2Rlcz8gVGhpc1xuICAgKiAgICAgICAgICAgICAgICAgaGFwcGVucyB3aGVuIGZ1bmN0aW9ucyBoYXZlIGhpZ2hlciBwcmVjZWRlbmNlIGhhbiBpbmZpeFxuICAgKiAgICAgICAgICAgICAgICAgbm9kZXMgaW4gaW1wbGljaXQgcGFyc2VzLlxuICAgKlxuICAgKiBgYnJlYWtPblRva2VuVGV4dGA6IFRoZSB0ZXh0IG9mIHRoZSB0b2tlbiB0aGF0IHRoZSBleHByZXNzaW9uIHNob3VsZCBlbmRcbiAgICogICAgICAgICAgICAgICAgICAgICB3aXRoLCBvciBgbnVsbGAgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGVuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLlxuICAgKi9cbiAgcGFyc2VFeHByZXNzaW9uKGJyZWFrT25JbmZpeCwgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBib2R5ID0gW107IC8vIEtlZXAgYWRkaW5nIGF0b21zIHRvIHRoZSBib2R5IHVudGlsIHdlIGNhbid0IHBhcnNlIGFueSBtb3JlIGF0b21zIChlaXRoZXJcbiAgICAvLyB3ZSByZWFjaGVkIHRoZSBlbmQsIGEgfSwgb3IgYSBcXHJpZ2h0KVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIElnbm9yZSBzcGFjZXMgaW4gbWF0aCBtb2RlXG4gICAgICBpZiAodGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxleCA9IHRoaXMuZmV0Y2goKTtcblxuICAgICAgaWYgKFBhcnNlci5lbmRPZkV4cHJlc3Npb24uaW5kZXhPZihsZXgudGV4dCkgIT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnJlYWtPblRva2VuVGV4dCAmJiBsZXgudGV4dCA9PT0gYnJlYWtPblRva2VuVGV4dCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGJyZWFrT25JbmZpeCAmJiBmdW5jdGlvbnNbbGV4LnRleHRdICYmIGZ1bmN0aW9uc1tsZXgudGV4dF0uaW5maXgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdG9tID0gdGhpcy5wYXJzZUF0b20oYnJlYWtPblRva2VuVGV4dCk7XG5cbiAgICAgIGlmICghYXRvbSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoYXRvbS50eXBlID09PSBcImludGVybmFsXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJvZHkucHVzaChhdG9tKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2RlID09PSBcInRleHRcIikge1xuICAgICAgdGhpcy5mb3JtTGlnYXR1cmVzKGJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhhbmRsZUluZml4Tm9kZXMoYm9keSk7XG4gIH1cbiAgLyoqXG4gICAqIFJld3JpdGVzIGluZml4IG9wZXJhdG9ycyBzdWNoIGFzIFxcb3ZlciB3aXRoIGNvcnJlc3BvbmRpbmcgY29tbWFuZHMgc3VjaFxuICAgKiBhcyBcXGZyYWMuXG4gICAqXG4gICAqIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAuICBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmVcbiAgICogdGhlbiB0aGUgZXhwcmVzc2lvbiBpcyBhbWJpZ3VvdXMuICBUaGlzIGNhbiBiZSByZXNvbHZlZCBieSBhZGRpbmcge30uXG4gICAqL1xuXG5cbiAgaGFuZGxlSW5maXhOb2Rlcyhib2R5KSB7XG4gICAgdmFyIG92ZXJJbmRleCA9IC0xO1xuICAgIHZhciBmdW5jTmFtZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9keS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJvZHlbaV0udHlwZSA9PT0gXCJpbmZpeFwiKSB7XG4gICAgICAgIGlmIChvdmVySW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXBcIiwgYm9keVtpXS50b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBvdmVySW5kZXggPSBpO1xuICAgICAgICBmdW5jTmFtZSA9IGJvZHlbaV0ucmVwbGFjZVdpdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG92ZXJJbmRleCAhPT0gLTEgJiYgZnVuY05hbWUpIHtcbiAgICAgIHZhciBudW1lck5vZGU7XG4gICAgICB2YXIgZGVub21Ob2RlO1xuICAgICAgdmFyIG51bWVyQm9keSA9IGJvZHkuc2xpY2UoMCwgb3ZlckluZGV4KTtcbiAgICAgIHZhciBkZW5vbUJvZHkgPSBib2R5LnNsaWNlKG92ZXJJbmRleCArIDEpO1xuXG4gICAgICBpZiAobnVtZXJCb2R5Lmxlbmd0aCA9PT0gMSAmJiBudW1lckJvZHlbMF0udHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgICAgIG51bWVyTm9kZSA9IG51bWVyQm9keVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bWVyTm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IG51bWVyQm9keVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVub21Cb2R5Lmxlbmd0aCA9PT0gMSAmJiBkZW5vbUJvZHlbMF0udHlwZSA9PT0gXCJvcmRncm91cFwiKSB7XG4gICAgICAgIGRlbm9tTm9kZSA9IGRlbm9tQm9keVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbm9tTm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IGRlbm9tQm9keVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9kZTtcblxuICAgICAgaWYgKGZ1bmNOYW1lID09PSBcIlxcXFxcXFxcYWJvdmVmcmFjXCIpIHtcbiAgICAgICAgbm9kZSA9IHRoaXMuY2FsbEZ1bmN0aW9uKGZ1bmNOYW1lLCBbbnVtZXJOb2RlLCBib2R5W292ZXJJbmRleF0sIGRlbm9tTm9kZV0sIFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmNhbGxGdW5jdGlvbihmdW5jTmFtZSwgW251bWVyTm9kZSwgZGVub21Ob2RlXSwgW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW25vZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYm9keTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHN1YnNjcmlwdCBvciBzdXBlcnNjcmlwdCB3aXRoIG5pY2UgZXJyb3JzLlxuICAgKi9cblxuXG4gIGhhbmRsZVN1cFN1YnNjcmlwdChuYW1lIC8vIEZvciBlcnJvciByZXBvcnRpbmcuXG4gICkge1xuICAgIHZhciBzeW1ib2xUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgc3ltYm9sID0gc3ltYm9sVG9rZW4udGV4dDtcbiAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB0aGlzLmNvbnN1bWVTcGFjZXMoKTsgLy8gaWdub3JlIHNwYWNlcyBiZWZvcmUgc3VwL3N1YnNjcmlwdCBhcmd1bWVudFxuXG4gICAgdmFyIGdyb3VwID0gdGhpcy5wYXJzZUdyb3VwKG5hbWUpO1xuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhZnRlciAnXCIgKyBzeW1ib2wgKyBcIidcIiwgc3ltYm9sVG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHRleHR1YWwgaW5wdXQgb2YgYW4gdW5zdXBwb3J0ZWQgY29tbWFuZCBpbnRvIGEgdGV4dCBub2RlXG4gICAqIGNvbnRhaW5lZCB3aXRoaW4gYSBjb2xvciBub2RlIHdob3NlIGNvbG9yIGlzIGRldGVybWluZWQgYnkgZXJyb3JDb2xvclxuICAgKi9cblxuXG4gIGZvcm1hdFVuc3VwcG9ydGVkQ21kKHRleHQpIHtcbiAgICB2YXIgdGV4dG9yZEFycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRleHRvcmRBcnJheS5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICB0ZXh0OiB0ZXh0W2ldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGJvZHk6IHRleHRvcmRBcnJheVxuICAgIH07XG4gICAgdmFyIGNvbG9yTm9kZSA9IHtcbiAgICAgIHR5cGU6IFwiY29sb3JcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yOiB0aGlzLnNldHRpbmdzLmVycm9yQ29sb3IsXG4gICAgICBib2R5OiBbdGV4dE5vZGVdXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBncm91cCB3aXRoIG9wdGlvbmFsIHN1cGVyL3N1YnNjcmlwdHMuXG4gICAqL1xuXG5cbiAgcGFyc2VBdG9tKGJyZWFrT25Ub2tlblRleHQpIHtcbiAgICAvLyBUaGUgYm9keSBvZiBhbiBhdG9tIGlzIGFuIGltcGxpY2l0IGdyb3VwLCBzbyB0aGF0IHRoaW5ncyBsaWtlXG4gICAgLy8gXFxsZWZ0KHhcXHJpZ2h0KV4yIHdvcmsgY29ycmVjdGx5LlxuICAgIHZhciBiYXNlID0gdGhpcy5wYXJzZUdyb3VwKFwiYXRvbVwiLCBicmVha09uVG9rZW5UZXh0KTsgLy8gSW4gdGV4dCBtb2RlLCB3ZSBkb24ndCBoYXZlIHN1cGVyc2NyaXB0cyBvciBzdWJzY3JpcHRzXG5cbiAgICBpZiAodGhpcy5tb2RlID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfSAvLyBOb3RlIHRoYXQgYmFzZSBtYXkgYmUgZW1wdHkgKGkuZS4gbnVsbCkgYXQgdGhpcyBwb2ludC5cblxuXG4gICAgdmFyIHN1cGVyc2NyaXB0O1xuICAgIHZhciBzdWJzY3JpcHQ7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gR3VhcmFudGVlZCBpbiBtYXRoIG1vZGUsIHNvIGVhdCBhbnkgc3BhY2VzIGZpcnN0LlxuICAgICAgdGhpcy5jb25zdW1lU3BhY2VzKCk7IC8vIExleCB0aGUgZmlyc3QgdG9rZW5cblxuICAgICAgdmFyIGxleCA9IHRoaXMuZmV0Y2goKTtcblxuICAgICAgaWYgKGxleC50ZXh0ID09PSBcIlxcXFxsaW1pdHNcIiB8fCBsZXgudGV4dCA9PT0gXCJcXFxcbm9saW1pdHNcIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBsaW1pdCBjb250cm9sXG4gICAgICAgIGlmIChiYXNlICYmIGJhc2UudHlwZSA9PT0gXCJvcFwiKSB7XG4gICAgICAgICAgdmFyIGxpbWl0cyA9IGxleC50ZXh0ID09PSBcIlxcXFxsaW1pdHNcIjtcbiAgICAgICAgICBiYXNlLmxpbWl0cyA9IGxpbWl0cztcbiAgICAgICAgICBiYXNlLmFsd2F5c0hhbmRsZVN1cFN1YiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZSAmJiBiYXNlLnR5cGUgPT09IFwib3BlcmF0b3JuYW1lXCIpIHtcbiAgICAgICAgICBpZiAoYmFzZS5hbHdheXNIYW5kbGVTdXBTdWIpIHtcbiAgICAgICAgICAgIGJhc2UubGltaXRzID0gbGV4LnRleHQgPT09IFwiXFxcXGxpbWl0c1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkxpbWl0IGNvbnRyb2xzIG11c3QgZm9sbG93IGEgbWF0aCBvcGVyYXRvclwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB9IGVsc2UgaWYgKGxleC50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAvLyBXZSBnb3QgYSBzdXBlcnNjcmlwdCBzdGFydFxuICAgICAgICBpZiAoc3VwZXJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdXBlcnNjcmlwdFwiLCBsZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXJzY3JpcHQgPSB0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdChcInN1cGVyc2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCJfXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgc3Vic2NyaXB0IHN0YXJ0XG4gICAgICAgIGlmIChzdWJzY3JpcHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkRvdWJsZSBzdWJzY3JpcHRcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmlwdCA9IHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3Vic2NyaXB0XCIpO1xuICAgICAgfSBlbHNlIGlmIChsZXgudGV4dCA9PT0gXCInXCIpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgcHJpbWVcbiAgICAgICAgaWYgKHN1cGVyc2NyaXB0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJEb3VibGUgc3VwZXJzY3JpcHRcIiwgbGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmltZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgdGV4dDogXCJcXFxccHJpbWVcIlxuICAgICAgICB9OyAvLyBNYW55IHByaW1lcyBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciwgc28gd2UgaGFuZGxlIHRoaXMgaGVyZVxuXG4gICAgICAgIHZhciBwcmltZXMgPSBbcHJpbWVdO1xuICAgICAgICB0aGlzLmNvbnN1bWUoKTsgLy8gS2VlcCBsZXhpbmcgdG9rZW5zIHVudGlsIHdlIGdldCBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHByaW1lXG5cbiAgICAgICAgd2hpbGUgKHRoaXMuZmV0Y2goKS50ZXh0ID09PSBcIidcIikge1xuICAgICAgICAgIC8vIEZvciBlYWNoIG9uZSwgYWRkIGFub3RoZXIgcHJpbWUgdG8gdGhlIGxpc3RcbiAgICAgICAgICBwcmltZXMucHVzaChwcmltZSk7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH0gLy8gSWYgdGhlcmUncyBhIHN1cGVyc2NyaXB0IGZvbGxvd2luZyB0aGUgcHJpbWVzLCBjb21iaW5lIHRoYXRcbiAgICAgICAgLy8gc3VwZXJzY3JpcHQgaW4gd2l0aCB0aGUgcHJpbWVzLlxuXG5cbiAgICAgICAgaWYgKHRoaXMuZmV0Y2goKS50ZXh0ID09PSBcIl5cIikge1xuICAgICAgICAgIHByaW1lcy5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KFwic3VwZXJzY3JpcHRcIikpO1xuICAgICAgICB9IC8vIFB1dCBldmVyeXRoaW5nIGludG8gYW4gb3JkZ3JvdXAgYXMgdGhlIHN1cGVyc2NyaXB0XG5cblxuICAgICAgICBzdXBlcnNjcmlwdCA9IHtcbiAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGJvZHk6IHByaW1lc1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh1U3Vic0FuZFN1cHNbbGV4LnRleHRdKSB7XG4gICAgICAgIC8vIEEgVW5pY29kZSBzdWJzY3JpcHQgb3Igc3VwZXJzY3JpcHQgY2hhcmFjdGVyLlxuICAgICAgICAvLyBXZSB0cmVhdCB0aGVzZSBzaW1pbGFybHkgdG8gdGhlIHVuaWNvZGUtbWF0aCBwYWNrYWdlLlxuICAgICAgICAvLyBTbyB3ZSByZW5kZXIgYSBzdHJpbmcgb2YgVW5pY29kZSAoc3VifHN1cGVyKXNjcmlwdHMgdGhlXG4gICAgICAgIC8vIHNhbWUgYXMgYSAoc3VifHN1cGVyKXNjcmlwdCBvZiByZWd1bGFyIGNoYXJhY3RlcnMuXG4gICAgICAgIHZhciBzdHIgPSB1U3Vic0FuZFN1cHNbbGV4LnRleHRdO1xuICAgICAgICB2YXIgaXNTdWIgPSB1bmljb2RlU3ViUmVnRXgudGVzdChsZXgudGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpOyAvLyBDb250aW51ZSBmZXRjaGluZyB0b2tlbnMgdG8gZmlsbCBvdXQgdGhlIHN0cmluZy5cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKS50ZXh0O1xuXG4gICAgICAgICAgaWYgKCF1U3Vic0FuZFN1cHNbdG9rZW5dKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pY29kZVN1YlJlZ0V4LnRlc3QodG9rZW4pICE9PSBpc1N1Yikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgc3RyICs9IHVTdWJzQW5kU3Vwc1t0b2tlbl07XG4gICAgICAgIH0gLy8gTm93IGNyZWF0ZSBhIChzdWJ8c3VwZXIpc2NyaXB0LlxuXG5cbiAgICAgICAgdmFyIGJvZHkgPSBuZXcgUGFyc2VyKHN0ciwgdGhpcy5zZXR0aW5ncykucGFyc2UoKTtcblxuICAgICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgICBzdWJzY3JpcHQgPSB7XG4gICAgICAgICAgICB0eXBlOiBcIm9yZGdyb3VwXCIsXG4gICAgICAgICAgICBtb2RlOiBcIm1hdGhcIixcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1cGVyc2NyaXB0ID0ge1xuICAgICAgICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgICAgICAgbW9kZTogXCJtYXRoXCIsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgaXQgd2Fzbid0IF4sIF8sIG9yICcsIHN0b3AgcGFyc2luZyBzdXBlci9zdWJzY3JpcHRzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gQmFzZSBtdXN0IGJlIHNldCBpZiBzdXBlcnNjcmlwdCBvciBzdWJzY3JpcHQgYXJlIHNldCBwZXIgbG9naWMgYWJvdmUsXG4gICAgLy8gYnV0IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3IgdHlwZSBjaGVjayB0byBwYXNzLlxuXG5cbiAgICBpZiAoc3VwZXJzY3JpcHQgfHwgc3Vic2NyaXB0KSB7XG4gICAgICAvLyBJZiB3ZSBnb3QgZWl0aGVyIGEgc3VwZXJzY3JpcHQgb3Igc3Vic2NyaXB0LCBjcmVhdGUgYSBzdXBzdWJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic3Vwc3ViXCIsXG4gICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgYmFzZTogYmFzZSxcbiAgICAgICAgc3VwOiBzdXBlcnNjcmlwdCxcbiAgICAgICAgc3ViOiBzdWJzY3JpcHRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIGJvZHlcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIGVudGlyZSBmdW5jdGlvbiwgaW5jbHVkaW5nIGl0cyBiYXNlIGFuZCBhbGwgb2YgaXRzIGFyZ3VtZW50cy5cbiAgICovXG5cblxuICBwYXJzZUZ1bmN0aW9uKGJyZWFrT25Ub2tlblRleHQsIG5hbWUgLy8gRm9yIGRldGVybWluaW5nIGl0cyBjb250ZXh0XG4gICkge1xuICAgIHZhciB0b2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgZnVuYyA9IHRva2VuLnRleHQ7XG4gICAgdmFyIGZ1bmNEYXRhID0gZnVuY3Rpb25zW2Z1bmNdO1xuXG4gICAgaWYgKCFmdW5jRGF0YSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIGNvbnN1bWUgY29tbWFuZCB0b2tlblxuXG4gICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJhdG9tXCIgJiYgIWZ1bmNEYXRhLmFsbG93ZWRJbkFyZ3VtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkdvdCBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIHdpdGggbm8gYXJndW1lbnRzXCIgKyAobmFtZSA/IFwiIGFzIFwiICsgbmFtZSA6IFwiXCIpLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwidGV4dFwiICYmICFmdW5jRGF0YS5hbGxvd2VkSW5UZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIHRleHQgbW9kZVwiLCB0b2tlbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwibWF0aFwiICYmIGZ1bmNEYXRhLmFsbG93ZWRJbk1hdGggPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkNhbid0IHVzZSBmdW5jdGlvbiAnXCIgKyBmdW5jICsgXCInIGluIG1hdGggbW9kZVwiLCB0b2tlbik7XG4gICAgfVxuXG4gICAgdmFyIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfSA9IHRoaXMucGFyc2VBcmd1bWVudHMoZnVuYywgZnVuY0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmNhbGxGdW5jdGlvbihmdW5jLCBhcmdzLCBvcHRBcmdzLCB0b2tlbiwgYnJlYWtPblRva2VuVGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgYSBmdW5jdGlvbiBoYW5kbGVyIHdpdGggYSBzdWl0YWJsZSBjb250ZXh0IGFuZCBhcmd1bWVudHMuXG4gICAqL1xuXG5cbiAgY2FsbEZ1bmN0aW9uKG5hbWUsIGFyZ3MsIG9wdEFyZ3MsIHRva2VuLCBicmVha09uVG9rZW5UZXh0KSB7XG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmdW5jTmFtZTogbmFtZSxcbiAgICAgIHBhcnNlcjogdGhpcyxcbiAgICAgIHRva2VuLFxuICAgICAgYnJlYWtPblRva2VuVGV4dFxuICAgIH07XG4gICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbbmFtZV07XG5cbiAgICBpZiAoZnVuYyAmJiBmdW5jLmhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBmdW5jLmhhbmRsZXIoY29udGV4dCwgYXJncywgb3B0QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgXCIgKyBuYW1lKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gb3IgZW52aXJvbm1lbnRcbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50cyhmdW5jLCAvLyBTaG91bGQgbG9vayBsaWtlIFwiXFxuYW1lXCIgb3IgXCJcXGJlZ2lue25hbWV9XCIuXG4gIGZ1bmNEYXRhKSB7XG4gICAgdmFyIHRvdGFsQXJncyA9IGZ1bmNEYXRhLm51bUFyZ3MgKyBmdW5jRGF0YS5udW1PcHRpb25hbEFyZ3M7XG5cbiAgICBpZiAodG90YWxBcmdzID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiBbXSxcbiAgICAgICAgb3B0QXJnczogW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgb3B0QXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEFyZ3M7IGkrKykge1xuICAgICAgdmFyIGFyZ1R5cGUgPSBmdW5jRGF0YS5hcmdUeXBlcyAmJiBmdW5jRGF0YS5hcmdUeXBlc1tpXTtcbiAgICAgIHZhciBpc09wdGlvbmFsID0gaSA8IGZ1bmNEYXRhLm51bU9wdGlvbmFsQXJncztcblxuICAgICAgaWYgKGZ1bmNEYXRhLnByaW1pdGl2ZSAmJiBhcmdUeXBlID09IG51bGwgfHwgLy8gXFxzcXJ0IGV4cGFuZHMgaW50byBwcmltaXRpdmUgaWYgb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCBleGlzdFxuICAgICAgZnVuY0RhdGEudHlwZSA9PT0gXCJzcXJ0XCIgJiYgaSA9PT0gMSAmJiBvcHRBcmdzWzBdID09IG51bGwpIHtcbiAgICAgICAgYXJnVHlwZSA9IFwicHJpbWl0aXZlXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlR3JvdXBPZlR5cGUoXCJhcmd1bWVudCB0byAnXCIgKyBmdW5jICsgXCInXCIsIGFyZ1R5cGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICBvcHRBcmdzLnB1c2goYXJnKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICE9IG51bGwpIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGVcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWdcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3MsXG4gICAgICBvcHRBcmdzXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAgd2hlbiB0aGUgbW9kZSBpcyBjaGFuZ2luZy5cbiAgICovXG5cblxuICBwYXJzZUdyb3VwT2ZUeXBlKG5hbWUsIHR5cGUsIG9wdGlvbmFsKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG9wdGlvbmFsKTtcblxuICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG9wdGlvbmFsLCB0eXBlKTtcblxuICAgICAgY2FzZSBcImhib3hcIjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIGhib3ggYXJndW1lbnQgdHlwZSB3cmFwcyB0aGUgYXJndW1lbnQgaW4gdGhlIGVxdWl2YWxlbnQgb2ZcbiAgICAgICAgICAvLyBcXGhib3gsIHdoaWNoIGlzIGxpa2UgXFx0ZXh0IGJ1dCBzd2l0Y2hpbmcgdG8gXFx0ZXh0c3R5bGUgc2l6ZS5cbiAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChvcHRpb25hbCwgXCJ0ZXh0XCIpO1xuICAgICAgICAgIHJldHVybiBncm91cCAhPSBudWxsID8ge1xuICAgICAgICAgICAgdHlwZTogXCJzdHlsaW5nXCIsXG4gICAgICAgICAgICBtb2RlOiBncm91cC5tb2RlLFxuICAgICAgICAgICAgYm9keTogW2dyb3VwXSxcbiAgICAgICAgICAgIHN0eWxlOiBcInRleHRcIiAvLyBzaW11bGF0ZSBcXHRleHRzdHlsZVxuXG4gICAgICAgICAgfSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5wYXJzZVN0cmluZ0dyb3VwKFwicmF3XCIsIG9wdGlvbmFsKTtcbiAgICAgICAgICByZXR1cm4gdG9rZW4gIT0gbnVsbCA/IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmF3XCIsXG4gICAgICAgICAgICBtb2RlOiBcInRleHRcIixcbiAgICAgICAgICAgIHN0cmluZzogdG9rZW4udGV4dFxuICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwcmltaXRpdmVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWxcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9ncm91cCA9IHRoaXMucGFyc2VHcm91cChuYW1lKTtcblxuICAgICAgICAgIGlmIChfZ3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJFeHBlY3RlZCBncm91cCBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9ncm91cDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib3JpZ2luYWxcIjpcbiAgICAgIGNhc2UgbnVsbDpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIlVua25vd24gZ3JvdXAgdHlwZSBhcyBcIiArIG5hbWUsIHRoaXMuZmV0Y2goKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEaXNjYXJkIGFueSBzcGFjZSB0b2tlbnMsIGZldGNoaW5nIHRoZSBuZXh0IG5vbi1zcGFjZSB0b2tlbi5cbiAgICovXG5cblxuICBjb25zdW1lU3BhY2VzKCkge1xuICAgIHdoaWxlICh0aGlzLmZldGNoKCkudGV4dCA9PT0gXCIgXCIpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgZ3JvdXAsIGVzc2VudGlhbGx5IHJldHVybmluZyB0aGUgc3RyaW5nIGZvcm1lZCBieSB0aGVcbiAgICogYnJhY2UtZW5jbG9zZWQgdG9rZW5zIHBsdXMgc29tZSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG5cblxuICBwYXJzZVN0cmluZ0dyb3VwKG1vZGVOYW1lLCAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICBvcHRpb25hbCkge1xuICAgIHZhciBhcmdUb2tlbiA9IHRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChvcHRpb25hbCk7XG5cbiAgICBpZiAoYXJnVG9rZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgdmFyIG5leHRUb2tlbjtcblxuICAgIHdoaWxlICgobmV4dFRva2VuID0gdGhpcy5mZXRjaCgpKS50ZXh0ICE9PSBcIkVPRlwiKSB7XG4gICAgICBzdHIgKz0gbmV4dFRva2VuLnRleHQ7XG4gICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnN1bWUoKTsgLy8gY29uc3VtZSB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgYXJnVG9rZW4udGV4dCA9IHN0cjtcbiAgICByZXR1cm4gYXJnVG9rZW47XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHJlZ2V4LWRlbGltaXRlZCBncm91cDogdGhlIGxhcmdlc3Qgc2VxdWVuY2Ugb2YgdG9rZW5zXG4gICAqIHdob3NlIGNvbmNhdGVuYXRlZCBzdHJpbmdzIG1hdGNoIGByZWdleGAuIFJldHVybnMgdGhlIHN0cmluZ1xuICAgKiBmb3JtZWQgYnkgdGhlIHRva2VucyBwbHVzIHNvbWUgcG9zaXRpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuXG5cbiAgcGFyc2VSZWdleEdyb3VwKHJlZ2V4LCBtb2RlTmFtZSAvLyBVc2VkIHRvIGRlc2NyaWJlIHRoZSBtb2RlIGluIGVycm9yIG1lc3NhZ2VzLlxuICApIHtcbiAgICB2YXIgZmlyc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICB2YXIgbGFzdFRva2VuID0gZmlyc3RUb2tlbjtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB2YXIgbmV4dFRva2VuO1xuXG4gICAgd2hpbGUgKChuZXh0VG9rZW4gPSB0aGlzLmZldGNoKCkpLnRleHQgIT09IFwiRU9GXCIgJiYgcmVnZXgudGVzdChzdHIgKyBuZXh0VG9rZW4udGV4dCkpIHtcbiAgICAgIGxhc3RUb2tlbiA9IG5leHRUb2tlbjtcbiAgICAgIHN0ciArPSBsYXN0VG9rZW4udGV4dDtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBcIiArIG1vZGVOYW1lICsgXCI6ICdcIiArIGZpcnN0VG9rZW4udGV4dCArIFwiJ1wiLCBmaXJzdFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RUb2tlbi5yYW5nZShsYXN0VG9rZW4sIHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGNvbG9yIGRlc2NyaXB0aW9uLlxuICAgKi9cblxuXG4gIHBhcnNlQ29sb3JHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXMgPSB0aGlzLnBhcnNlU3RyaW5nR3JvdXAoXCJjb2xvclwiLCBvcHRpb25hbCk7XG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBtYXRjaCA9IC9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyZXMudGV4dCk7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgY29sb3I6ICdcIiArIHJlcy50ZXh0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yID0gbWF0Y2hbMF07XG5cbiAgICBpZiAoL15bMC05YS1mXXs2fSQvaS50ZXN0KGNvbG9yKSkge1xuICAgICAgLy8gV2UgYWxsb3cgYSA2LWRpZ2l0IEhUTUwgY29sb3Igc3BlYyB3aXRob3V0IGEgbGVhZGluZyBcIiNcIi5cbiAgICAgIC8vIFRoaXMgZm9sbG93cyB0aGUgeGNvbG9yIHBhY2thZ2UncyBIVE1MIGNvbG9yIG1vZGVsLlxuICAgICAgLy8gUHJlZGVmaW5lZCBjb2xvciBuYW1lcyBhcmUgYWxsIG1pc3NlZCBieSB0aGlzIFJlZ0V4IHBhdHRlcm4uXG4gICAgICBjb2xvciA9IFwiI1wiICsgY29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29sb3ItdG9rZW5cIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNvbG9yXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGEgc2l6ZSBzcGVjaWZpY2F0aW9uLCBjb25zaXN0aW5nIG9mIG1hZ25pdHVkZSBhbmQgdW5pdC5cbiAgICovXG5cblxuICBwYXJzZVNpemVHcm91cChvcHRpb25hbCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGlzQmxhbmsgPSBmYWxzZTsgLy8gZG9uJ3QgZXhwYW5kIGJlZm9yZSBwYXJzZVN0cmluZ0dyb3VwXG5cbiAgICB0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQgIT09IFwie1wiKSB7XG4gICAgICByZXMgPSB0aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxcZCt8XFxkK1xcLlxcZCp8XFwuXFxkKikgKlthLXpdezAsMn0gKiQvLCBcInNpemVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInNpemVcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbmFsICYmIHJlcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSd2ZSB0ZXN0ZWQgZm9yIHdoYXQgaXMgIW9wdGlvbmFsLCB0aGlzIGJsb2NrIHdvbid0XG4gICAgICAvLyBhZmZlY3QgXFxrZXJuLCBcXGhzcGFjZSwgZXRjLiBJdCB3aWxsIGNhcHR1cmUgdGhlIG1hbmRhdG9yeSBhcmd1bWVudHNcbiAgICAgIC8vIHRvIFxcZ2VuZnJhYyBhbmQgXFxhYm92ZS5cbiAgICAgIHJlcy50ZXh0ID0gXCIwcHRcIjsgLy8gRW5hYmxlIFxcYWJvdmV7fVxuXG4gICAgICBpc0JsYW5rID0gdHJ1ZTsgLy8gVGhpcyBpcyBoZXJlIHNwZWNpZmljYWxseSBmb3IgXFxnZW5mcmFjXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoID0gLyhbLStdPykgKihcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspICooW2Etel17Mn0pLy5leGVjKHJlcy50ZXh0KTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiSW52YWxpZCBzaXplOiAnXCIgKyByZXMudGV4dCArIFwiJ1wiLCByZXMpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgbnVtYmVyOiArKG1hdGNoWzFdICsgbWF0Y2hbMl0pLFxuICAgICAgLy8gc2lnbiArIG1hZ25pdHVkZSwgY2FzdCB0byBudW1iZXJcbiAgICAgIHVuaXQ6IG1hdGNoWzNdXG4gICAgfTtcblxuICAgIGlmICghdmFsaWRVbml0KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkludmFsaWQgdW5pdDogJ1wiICsgZGF0YS51bml0ICsgXCInXCIsIHJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic2l6ZVwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICBpc0JsYW5rXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGFuIFVSTCwgY2hlY2tpbmcgZXNjYXBlZCBsZXR0ZXJzIGFuZCBhbGxvd2VkIHByb3RvY29scyxcbiAgICogYW5kIHNldHRpbmcgdGhlIGNhdGNvZGUgb2YgJSBhcyBhbiBhY3RpdmUgY2hhcmFjdGVyIChhcyBpbiBcXGh5cGVycmVmKS5cbiAgICovXG5cblxuICBwYXJzZVVybEdyb3VwKG9wdGlvbmFsKSB7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICB0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKFwiflwiLCAxMik7IC8vIG90aGVyIGNoYXJhY3RlclxuXG4gICAgdmFyIHJlcyA9IHRoaXMucGFyc2VTdHJpbmdHcm91cChcInVybFwiLCBvcHRpb25hbCk7XG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIiVcIiwgMTQpOyAvLyBjb21tZW50IGNoYXJhY3RlclxuXG4gICAgdGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZShcIn5cIiwgMTMpOyAvLyBhY3RpdmUgY2hhcmFjdGVyXG5cbiAgICBpZiAocmVzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gaHlwZXJyZWYgcGFja2FnZSBhbGxvd3MgYmFja3NsYXNoZXMgYWxvbmUgaW4gaHJlZiwgYnV0IGRvZXNuJ3RcbiAgICAvLyBnZW5lcmF0ZSB2YWxpZCBsaW5rcyBpbiBzdWNoIGNhc2VzOyB3ZSBpbnRlcnByZXQgdGhpcyBhc1xuICAgIC8vIFwidW5kZWZpbmVkXCIgYmVoYXZpb3VyLCBhbmQga2VlcCB0aGVtIGFzLWlzLiBTb21lIGJyb3dzZXIgd2lsbFxuICAgIC8vIHJlcGxhY2UgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG5cblxuICAgIHZhciB1cmwgPSByZXMudGV4dC5yZXBsYWNlKC9cXFxcKFsjJCUmfl9ee31dKS9nLCAnJDEnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIHVybFxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBhcmd1bWVudCB3aXRoIHRoZSBtb2RlIHNwZWNpZmllZC5cbiAgICovXG5cblxuICBwYXJzZUFyZ3VtZW50R3JvdXAob3B0aW9uYWwsIG1vZGUpIHtcbiAgICB2YXIgYXJnVG9rZW4gPSB0aGlzLmd1bGxldC5zY2FuQXJndW1lbnQob3B0aW9uYWwpO1xuXG4gICAgaWYgKGFyZ1Rva2VuID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvdXRlck1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICBpZiAobW9kZSkge1xuICAgICAgLy8gU3dpdGNoIHRvIHNwZWNpZmllZCBtb2RlXG4gICAgICB0aGlzLnN3aXRjaE1vZGUobW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oZmFsc2UsIFwiRU9GXCIpOyAvLyBUT0RPOiBmaW5kIGFuIGFsdGVybmF0aXZlIHdheSB0byBkZW5vdGUgdGhlIGVuZFxuXG4gICAgdGhpcy5leHBlY3QoXCJFT0ZcIik7IC8vIGV4cGVjdCB0aGUgZW5kIG9mIHRoZSBhcmd1bWVudFxuXG4gICAgdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgdHlwZTogXCJvcmRncm91cFwiLFxuICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgbG9jOiBhcmdUb2tlbi5sb2MsXG4gICAgICBib2R5OiBleHByZXNzaW9uXG4gICAgfTtcblxuICAgIGlmIChtb2RlKSB7XG4gICAgICAvLyBTd2l0Y2ggbW9kZSBiYWNrXG4gICAgICB0aGlzLnN3aXRjaE1vZGUob3V0ZXJNb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gb3JkaW5hcnkgZ3JvdXAsIHdoaWNoIGlzIGVpdGhlciBhIHNpbmdsZSBudWNsZXVzIChsaWtlIFwieFwiKVxuICAgKiBvciBhbiBleHByZXNzaW9uIGluIGJyYWNlcyAobGlrZSBcInt4K3l9XCIpIG9yIGFuIGltcGxpY2l0IGdyb3VwLCBhIGdyb3VwXG4gICAqIHRoYXQgc3RhcnRzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgZW5kcyByaWdodCBiZWZvcmUgYSBoaWdoZXIgZXhwbGljaXRcbiAgICogZ3JvdXAgZW5kcywgb3IgYXQgRU9GLlxuICAgKi9cblxuXG4gIHBhcnNlR3JvdXAobmFtZSwgLy8gRm9yIGVycm9yIHJlcG9ydGluZy5cbiAgYnJlYWtPblRva2VuVGV4dCkge1xuICAgIHZhciBmaXJzdFRva2VuID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gZmlyc3RUb2tlbi50ZXh0O1xuICAgIHZhciByZXN1bHQ7IC8vIFRyeSB0byBwYXJzZSBhbiBvcGVuIGJyYWNlIG9yIFxcYmVnaW5ncm91cFxuXG4gICAgaWYgKHRleHQgPT09IFwie1wiIHx8IHRleHQgPT09IFwiXFxcXGJlZ2luZ3JvdXBcIikge1xuICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICB2YXIgZ3JvdXBFbmQgPSB0ZXh0ID09PSBcIntcIiA/IFwifVwiIDogXCJcXFxcZW5kZ3JvdXBcIjtcbiAgICAgIHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKTsgLy8gSWYgd2UgZ2V0IGEgYnJhY2UsIHBhcnNlIGFuIGV4cHJlc3Npb25cblxuICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlRXhwcmVzc2lvbihmYWxzZSwgZ3JvdXBFbmQpO1xuICAgICAgdmFyIGxhc3RUb2tlbiA9IHRoaXMuZmV0Y2goKTtcbiAgICAgIHRoaXMuZXhwZWN0KGdyb3VwRW5kKTsgLy8gQ2hlY2sgdGhhdCB3ZSBnb3QgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNlXG5cbiAgICAgIHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCk7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwib3JkZ3JvdXBcIixcbiAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGZpcnN0VG9rZW4sIGxhc3RUb2tlbiksXG4gICAgICAgIGJvZHk6IGV4cHJlc3Npb24sXG4gICAgICAgIC8vIEEgZ3JvdXAgZm9ybWVkIGJ5IFxcYmVnaW5ncm91cC4uLlxcZW5kZ3JvdXAgaXMgYSBzZW1pLXNpbXBsZSBncm91cFxuICAgICAgICAvLyB3aGljaCBkb2Vzbid0IGFmZmVjdCBzcGFjaW5nIGluIG1hdGggbW9kZSwgaS5lLiwgaXMgdHJhbnNwYXJlbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xOTMwL3doZW4tc2hvdWxkLW9uZS1cbiAgICAgICAgLy8gdXNlLWJlZ2luZ3JvdXAtaW5zdGVhZC1vZi1iZ3JvdXBcbiAgICAgICAgc2VtaXNpbXBsZTogdGV4dCA9PT0gXCJcXFxcYmVnaW5ncm91cFwiIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgZXhpc3RzIGEgZnVuY3Rpb24gd2l0aCB0aGlzIG5hbWUsIHBhcnNlIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCByZXR1cm4gYSBudWNsZXVzXG4gICAgICByZXN1bHQgPSB0aGlzLnBhcnNlRnVuY3Rpb24oYnJlYWtPblRva2VuVGV4dCwgbmFtZSkgfHwgdGhpcy5wYXJzZVN5bWJvbCgpO1xuXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgdGV4dFswXSA9PT0gXCJcXFxcXCIgJiYgIWltcGxpY2l0Q29tbWFuZHMuaGFzT3duUHJvcGVydHkodGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogXCIgKyB0ZXh0LCBmaXJzdFRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQodGV4dCk7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEZvcm0gbGlnYXR1cmUtbGlrZSBjb21iaW5hdGlvbnMgb2YgY2hhcmFjdGVycyBmb3IgdGV4dCBtb2RlLlxuICAgKiBUaGlzIGluY2x1ZGVzIGlucHV0cyBsaWtlIFwiLS1cIiwgXCItLS1cIiwgXCJgYFwiIGFuZCBcIicnXCIuXG4gICAqIFRoZSByZXN1bHQgd2lsbCBzaW1wbHkgcmVwbGFjZSBtdWx0aXBsZSB0ZXh0b3JkIG5vZGVzIHdpdGggYSBzaW5nbGVcbiAgICogY2hhcmFjdGVyIGluIGVhY2ggdmFsdWUgYnkgYSBzaW5nbGUgdGV4dG9yZCBub2RlIGhhdmluZyBtdWx0aXBsZVxuICAgKiBjaGFyYWN0ZXJzIGluIGl0cyB2YWx1ZS4gIFRoZSByZXByZXNlbnRhdGlvbiBpcyBzdGlsbCBBU0NJSSBzb3VyY2UuXG4gICAqIFRoZSBncm91cCB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgKi9cblxuXG4gIGZvcm1MaWdhdHVyZXMoZ3JvdXApIHtcbiAgICB2YXIgbiA9IGdyb3VwLmxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIGEgPSBncm91cFtpXTsgLy8gJEZsb3dGaXhNZTogTm90IGV2ZXJ5IG5vZGUgdHlwZSBoYXMgYSBgdGV4dGAgcHJvcGVydHkuXG5cbiAgICAgIHZhciB2ID0gYS50ZXh0O1xuXG4gICAgICBpZiAodiA9PT0gXCItXCIgJiYgZ3JvdXBbaSArIDFdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgIGlmIChpICsgMSA8IG4gJiYgZ3JvdXBbaSArIDJdLnRleHQgPT09IFwiLVwiKSB7XG4gICAgICAgICAgZ3JvdXAuc3BsaWNlKGksIDMsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dG9yZFwiLFxuICAgICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKGEsIGdyb3VwW2kgKyAyXSksXG4gICAgICAgICAgICB0ZXh0OiBcIi0tLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRvcmRcIixcbiAgICAgICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgICAgdGV4dDogXCItLVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbiAtPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgodiA9PT0gXCInXCIgfHwgdiA9PT0gXCJgXCIpICYmIGdyb3VwW2kgKyAxXS50ZXh0ID09PSB2KSB7XG4gICAgICAgIGdyb3VwLnNwbGljZShpLCAyLCB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbG9jOiBTb3VyY2VMb2NhdGlvbi5yYW5nZShhLCBncm91cFtpICsgMV0pLFxuICAgICAgICAgIHRleHQ6IHYgKyB2XG4gICAgICAgIH0pO1xuICAgICAgICBuIC09IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBzeW1ib2wgb3V0IG9mIHRoZSBzdHJpbmcuIEhlcmUsIHdlIGhhbmRsZSBzaW5nbGUgY2hhcmFjdGVyXG4gICAqIHN5bWJvbHMgYW5kIHNwZWNpYWwgZnVuY3Rpb25zIGxpa2UgXFx2ZXJiLlxuICAgKi9cblxuXG4gIHBhcnNlU3ltYm9sKCkge1xuICAgIHZhciBudWNsZXVzID0gdGhpcy5mZXRjaCgpO1xuICAgIHZhciB0ZXh0ID0gbnVjbGV1cy50ZXh0O1xuXG4gICAgaWYgKC9eXFxcXHZlcmJbXmEtekEtWl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgdmFyIGFyZyA9IHRleHQuc2xpY2UoNSk7XG4gICAgICB2YXIgc3RhciA9IGFyZy5jaGFyQXQoMCkgPT09IFwiKlwiO1xuXG4gICAgICBpZiAoc3Rhcikge1xuICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMSk7XG4gICAgICB9IC8vIExleGVyJ3MgdG9rZW5SZWdleCBpcyBjb25zdHJ1Y3RlZCB0byBhbHdheXMgaGF2ZSBtYXRjaGluZ1xuICAgICAgLy8gZmlyc3QvbGFzdCBjaGFyYWN0ZXJzLlxuXG5cbiAgICAgIGlmIChhcmcubGVuZ3RoIDwgMiB8fCBhcmcuY2hhckF0KDApICE9PSBhcmcuc2xpY2UoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiXFxcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLVxcbiAgICAgICAgICAgICAgICAgICAgcGxlYXNlIHJlcG9ydCB3aGF0IGlucHV0IGNhdXNlZCB0aGlzIGJ1Z1wiKTtcbiAgICAgIH1cblxuICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTsgLy8gcmVtb3ZlIGZpcnN0IGFuZCBsYXN0IGNoYXJcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ2ZXJiXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBib2R5OiBhcmcsXG4gICAgICAgIHN0YXJcbiAgICAgIH07XG4gICAgfSAvLyBBdCB0aGlzIHBvaW50LCB3ZSBzaG91bGQgaGF2ZSBhIHN5bWJvbCwgcG9zc2libHkgd2l0aCBhY2NlbnRzLlxuICAgIC8vIEZpcnN0IGV4cGFuZCBhbnkgYWNjZW50ZWQgYmFzZSBzeW1ib2wgYWNjb3JkaW5nIHRvIHVuaWNvZGVTeW1ib2xzLlxuXG5cbiAgICBpZiAodW5pY29kZVN5bWJvbHMuaGFzT3duUHJvcGVydHkodGV4dFswXSkgJiYgIXN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0WzBdXSkge1xuICAgICAgLy8gVGhpcyBiZWhhdmlvciBpcyBub3Qgc3RyaWN0IChYZVRlWC1jb21wYXRpYmxlKSBpbiBtYXRoIG1vZGUuXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSBcIm1hdGhcIikge1xuICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIkFjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSB1bmljb2RlU3ltYm9sc1t0ZXh0WzBdXSArIHRleHQuc2xpY2UoMSk7XG4gICAgfSAvLyBTdHJpcCBvZmYgYW55IGNvbWJpbmluZyBjaGFyYWN0ZXJzXG5cblxuICAgIHZhciBtYXRjaCA9IGNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleC5leGVjKHRleHQpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpO1xuXG4gICAgICBpZiAodGV4dCA9PT0gJ2knKSB7XG4gICAgICAgIHRleHQgPSAnXFx1MDEzMSc7IC8vIGRvdGxlc3MgaSwgaW4gbWF0aCBhbmQgdGV4dCBtb2RlXG4gICAgICB9IGVsc2UgaWYgKHRleHQgPT09ICdqJykge1xuICAgICAgICB0ZXh0ID0gJ1xcdTAyMzcnOyAvLyBkb3RsZXNzIGosIGluIG1hdGggYW5kIHRleHQgbW9kZVxuICAgICAgfVxuICAgIH0gLy8gUmVjb2duaXplIGJhc2Ugc3ltYm9sXG5cblxuICAgIHZhciBzeW1ib2w7XG5cbiAgICBpZiAoc3ltYm9sc1t0aGlzLm1vZGVdW3RleHRdKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zdHJpY3QgJiYgdGhpcy5tb2RlID09PSAnbWF0aCcgJiYgZXh0cmFMYXRpbi5pbmRleE9mKHRleHQpID49IDApIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmljb2RlVGV4dEluTWF0aE1vZGVcIiwgXCJMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIFwiICsgXCJtYXRoIG1vZGVcIiwgbnVjbGV1cyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBncm91cCA9IHN5bWJvbHNbdGhpcy5tb2RlXVt0ZXh0XS5ncm91cDtcbiAgICAgIHZhciBsb2MgPSBTb3VyY2VMb2NhdGlvbi5yYW5nZShudWNsZXVzKTtcbiAgICAgIHZhciBzO1xuXG4gICAgICBpZiAoQVRPTVMuaGFzT3duUHJvcGVydHkoZ3JvdXApKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgdmFyIGZhbWlseSA9IGdyb3VwO1xuICAgICAgICBzID0ge1xuICAgICAgICAgIHR5cGU6IFwiYXRvbVwiLFxuICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgICAgICBmYW1pbHksXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcyA9IHtcbiAgICAgICAgICB0eXBlOiBncm91cCxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfTtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIHN5bWJvbCA9IHM7XG4gICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkge1xuICAgICAgLy8gbm8gc3ltYm9sIGZvciBlLmcuIF5cbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnN0cmljdCkge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZENvZGVwb2ludCh0ZXh0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoXCJ1bmtub3duU3ltYm9sXCIsIFwiVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyIFxcXCJcIiArIHRleHRbMF0gKyBcIlxcXCJcIiArIChcIiAoXCIgKyB0ZXh0LmNoYXJDb2RlQXQoMCkgKyBcIilcIiksIG51Y2xldXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJtYXRoXCIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdChcInVuaWNvZGVUZXh0SW5NYXRoTW9kZVwiLCBcIlVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgXFxcIlwiICsgdGV4dFswXSArIFwiXFxcIiB1c2VkIGluIG1hdGggbW9kZVwiLCBudWNsZXVzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbGwgbm9ubWF0aGVtYXRpY2FsIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgcmVuZGVyZWQgYXMgaWYgdGhleVxuICAgICAgLy8gYXJlIGluIHRleHQgbW9kZSAod3JhcHBlZCBpbiBcXHRleHQpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXRcbiAgICAgIC8vIHRha2VzIHRvIHJlbmRlciB0aGVtIGluIExhVGVYLiAgU2V0dGluZyBgbW9kZTogdGhpcy5tb2RlYCBpc1xuICAgICAgLy8gYW5vdGhlciBuYXR1cmFsIGNob2ljZSAodGhlIHVzZXIgcmVxdWVzdGVkIG1hdGggbW9kZSksIGJ1dFxuICAgICAgLy8gdGhpcyBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgZ2V0Q2hhcmFjdGVyTWV0cmljcygpIHRvXG4gICAgICAvLyBkaXN0aW5ndWlzaCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91dCBtZXRyaWNzIGFuZCB0aG9zZSBmb3JcbiAgICAgIC8vIHdoaWNoIHdlIHdhbnQgdG8gc2ltdWxhdGUgdGhlIGxldHRlciBNLlxuXG5cbiAgICAgIHN5bWJvbCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0b3JkXCIsXG4gICAgICAgIG1vZGU6IFwidGV4dFwiLFxuICAgICAgICBsb2M6IFNvdXJjZUxvY2F0aW9uLnJhbmdlKG51Y2xldXMpLFxuICAgICAgICB0ZXh0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRU9GLCBeLCBfLCB7LCB9LCBldGMuXG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lKCk7IC8vIFRyYW5zZm9ybSBjb21iaW5pbmcgY2hhcmFjdGVycyBpbnRvIGFjY2VudHNcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaFswXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYWNjZW50ID0gbWF0Y2hbMF1baV07XG5cbiAgICAgICAgaWYgKCF1bmljb2RlQWNjZW50c1thY2NlbnRdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJVbmtub3duIGFjY2VudCAnIFwiICsgYWNjZW50ICsgXCInXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbW1hbmQgPSB1bmljb2RlQWNjZW50c1thY2NlbnRdW3RoaXMubW9kZV0gfHwgdW5pY29kZUFjY2VudHNbYWNjZW50XS50ZXh0O1xuXG4gICAgICAgIGlmICghY29tbWFuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKFwiQWNjZW50IFwiICsgYWNjZW50ICsgXCIgdW5zdXBwb3J0ZWQgaW4gXCIgKyB0aGlzLm1vZGUgKyBcIiBtb2RlXCIsIG51Y2xldXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ltYm9sID0ge1xuICAgICAgICAgIHR5cGU6IFwiYWNjZW50XCIsXG4gICAgICAgICAgbW9kZTogdGhpcy5tb2RlLFxuICAgICAgICAgIGxvYzogU291cmNlTG9jYXRpb24ucmFuZ2UobnVjbGV1cyksXG4gICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgaXNTdHJldGNoeTogZmFsc2UsXG4gICAgICAgICAgaXNTaGlmdHk6IHRydWUsXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGJhc2U6IHN5bWJvbFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbn1cblBhcnNlci5lbmRPZkV4cHJlc3Npb24gPSBbXCJ9XCIsIFwiXFxcXGVuZGdyb3VwXCIsIFwiXFxcXGVuZFwiLCBcIlxcXFxyaWdodFwiLCBcIiZcIl07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlclxuICogVE9ETyhlbWlseSk6IFJlbW92ZSB0aGlzXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiB1c2luZyBhIFBhcnNlciwgdGhlbiByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICovXG52YXIgcGFyc2VUcmVlID0gZnVuY3Rpb24gcGFyc2VUcmVlKHRvUGFyc2UsIHNldHRpbmdzKSB7XG4gIGlmICghKHR5cGVvZiB0b1BhcnNlID09PSAnc3RyaW5nJyB8fCB0b1BhcnNlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0thVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uJyk7XG4gIH1cblxuICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0b1BhcnNlLCBzZXR0aW5ncyk7IC8vIEJsYW5rIG91dCBhbnkgXFxkZkB0YWcgdG8gYXZvaWQgc3B1cmlvdXMgXCJEdXBsaWNhdGUgXFx0YWdcIiBlcnJvcnNcblxuICBkZWxldGUgcGFyc2VyLmd1bGxldC5tYWNyb3MuY3VycmVudFtcIlxcXFxkZkB0YWdcIl07XG4gIHZhciB0cmVlID0gcGFyc2VyLnBhcnNlKCk7IC8vIFByZXZlbnQgYSBjb2xvciBkZWZpbml0aW9uIGZyb20gcGVyc2lzdGluZyBiZXR3ZWVuIGNhbGxzIHRvIGthdGV4LnJlbmRlcigpLlxuXG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGN1cnJlbnRAY29sb3JcIl07XG4gIGRlbGV0ZSBwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50W1wiXFxcXGNvbG9yXCJdOyAvLyBJZiB0aGUgaW5wdXQgdXNlZCBcXHRhZywgaXQgd2lsbCBzZXQgdGhlIFxcZGZAdGFnIG1hY3JvIHRvIHRoZSB0YWcuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2VwYXJhdGVseSBwYXJzZSB0aGUgdGFnIGFuZCB3cmFwIHRoZSB0cmVlLlxuXG4gIGlmIChwYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoXCJcXFxcZGZAdGFnXCIpKSB7XG4gICAgaWYgKCFzZXR0aW5ncy5kaXNwbGF5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoXCJcXFxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnNcIik7XG4gICAgfVxuXG4gICAgdHJlZSA9IFt7XG4gICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgbW9kZTogXCJ0ZXh0XCIsXG4gICAgICBib2R5OiB0cmVlLFxuICAgICAgdGFnOiBwYXJzZXIuc3VicGFyc2UoW25ldyBUb2tlbihcIlxcXFxkZkB0YWdcIildKVxuICAgIH1dO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59O1xuXG4vKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cbi8qKlxuICogUGFyc2UgYW5kIGJ1aWxkIGFuIGV4cHJlc3Npb24sIGFuZCBwbGFjZSB0aGF0IGV4cHJlc3Npb24gaW4gdGhlIERPTSBub2RlXG4gKiBnaXZlbi5cbiAqL1xudmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihleHByZXNzaW9uLCBiYXNlTm9kZSwgb3B0aW9ucykge1xuICBiYXNlTm9kZS50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHZhciBub2RlID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTm9kZSgpO1xuICBiYXNlTm9kZS5hcHBlbmRDaGlsZChub2RlKTtcbn07IC8vIEthVGVYJ3Mgc3R5bGVzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gcXVpcmtzIG1vZGUuIFByaW50IG91dCBhbiBlcnJvciwgYW5kXG4vLyBkaXNhYmxlIHJlbmRlcmluZy5cblxuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGlmIChkb2N1bWVudC5jb21wYXRNb2RlICE9PSBcIkNTUzFDb21wYXRcIikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihcIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgXCIgKyBcIndlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS5cIik7XG5cbiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihcIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS5cIik7XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBQYXJzZSBhbmQgYnVpbGQgYW4gZXhwcmVzc2lvbiwgYW5kIHJldHVybiB0aGUgbWFya3VwIGZvciB0aGF0LlxuICovXG5cblxudmFyIHJlbmRlclRvU3RyaW5nID0gZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICB2YXIgbWFya3VwID0gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpLnRvTWFya3VwKCk7XG4gIHJldHVybiBtYXJrdXA7XG59O1xuLyoqXG4gKiBQYXJzZSBhbiBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIHBhcnNlIHRyZWUuXG4gKi9cblxuXG52YXIgZ2VuZXJhdGVQYXJzZVRyZWUgPSBmdW5jdGlvbiBnZW5lcmF0ZVBhcnNlVHJlZShleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gIHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyhvcHRpb25zKTtcbiAgcmV0dXJuIHBhcnNlVHJlZShleHByZXNzaW9uLCBzZXR0aW5ncyk7XG59O1xuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gZXJyb3IgaXMgYSBLYVRlWCBQYXJzZUVycm9yIGFuZCBvcHRpb25zLnRocm93T25FcnJvciBpcyBmYWxzZSxcbiAqIHJlbmRlcnMgdGhlIGludmFsaWQgTGFUZVggYXMgYSBzcGFuIHdpdGggaG92ZXIgdGl0bGUgZ2l2aW5nIHRoZSBLYVRlWFxuICogZXJyb3IgbWVzc2FnZS4gIE90aGVyd2lzZSwgc2ltcGx5IHRocm93cyB0aGUgZXJyb3IuXG4gKi9cblxuXG52YXIgcmVuZGVyRXJyb3IgPSBmdW5jdGlvbiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IgfHwgIShlcnJvciBpbnN0YW5jZW9mIFBhcnNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB2YXIgbm9kZSA9IGJ1aWxkQ29tbW9uLm1ha2VTcGFuKFtcImthdGV4LWVycm9yXCJdLCBbbmV3IFN5bWJvbE5vZGUoZXhwcmVzc2lvbildKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBlcnJvci50b1N0cmluZygpKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNvbG9yOlwiICsgb3B0aW9ucy5lcnJvckNvbG9yKTtcbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUuIFRoaXMgaXMgdXNlZCBmb3IgYWR2YW5jZWRcbiAqIHVzZSBjYXNlcyAobGlrZSByZW5kZXJpbmcgdG8gY3VzdG9tIG91dHB1dCkuXG4gKi9cblxuXG52YXIgcmVuZGVyVG9Eb21UcmVlID0gZnVuY3Rpb24gcmVuZGVyVG9Eb21UcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZFRyZWUodHJlZSwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZW5kZXJFcnJvcihlcnJvciwgZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICB9XG59O1xuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIHJldHVybnMgdGhlIGthdGV4IGJ1aWxkIHRyZWUsIHdpdGgganVzdCBIVE1MIChubyBNYXRoTUwpLlxuICogVGhpcyBpcyB1c2VkIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgKGxpa2UgcmVuZGVyaW5nIHRvIGN1c3RvbSBvdXRwdXQpLlxuICovXG5cblxudmFyIHJlbmRlclRvSFRNTFRyZWUgPSBmdW5jdGlvbiByZW5kZXJUb0hUTUxUcmVlKGV4cHJlc3Npb24sIG9wdGlvbnMpIHtcbiAgdmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKG9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgdmFyIHRyZWUgPSBwYXJzZVRyZWUoZXhwcmVzc2lvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiBidWlsZEhUTUxUcmVlKHRyZWUsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVuZGVyRXJyb3IoZXJyb3IsIGV4cHJlc3Npb24sIHNldHRpbmdzKTtcbiAgfVxufTtcblxudmFyIGthdGV4ID0ge1xuICAvKipcbiAgICogQ3VycmVudCBLYVRlWCB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBcIjAuMTYuOFwiLFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBnaXZlbiBMYVRlWCBpbnRvIGFuIEhUTUwrTWF0aE1MIGNvbWJpbmF0aW9uLCBhbmQgYWRkc1xuICAgKiBpdCBhcyBhIGNoaWxkIHRvIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuXG4gICAqL1xuICByZW5kZXIsXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGdpdmVuIExhVGVYIGludG8gYW4gSFRNTCtNYXRoTUwgY29tYmluYXRpb24gc3RyaW5nLFxuICAgKiBmb3Igc2VuZGluZyB0byB0aGUgY2xpZW50LlxuICAgKi9cbiAgcmVuZGVyVG9TdHJpbmcsXG5cbiAgLyoqXG4gICAqIEthVGVYIGVycm9yLCB1c3VhbGx5IGR1cmluZyBwYXJzaW5nLlxuICAgKi9cbiAgUGFyc2VFcnJvcixcblxuICAvKipcbiAgICogVGhlIHNoZW1hIG9mIFNldHRpbmdzXG4gICAqL1xuICBTRVRUSU5HU19TQ0hFTUEsXG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgZ2l2ZW4gTGFUZVggaW50byBLYVRlWCdzIGludGVybmFsIHBhcnNlIHRyZWUgc3RydWN0dXJlLFxuICAgKiB3aXRob3V0IHJlbmRlcmluZyB0byBIVE1MIG9yIE1hdGhNTC5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgbm90IGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgcHVibGljIHVzZS5cbiAgICogVGhlIGludGVybmFsIHRyZWUgcmVwcmVzZW50YXRpb24gaXMgdW5zdGFibGUgYW5kIGlzIHZlcnkgbGlrZWx5XG4gICAqIHRvIGNoYW5nZS4gVXNlIGF0IHlvdXIgb3duIHJpc2suXG4gICAqL1xuICBfX3BhcnNlOiBnZW5lcmF0ZVBhcnNlVHJlZSxcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MK01hdGhNTCBpbnRlcm5hbCBET00gdHJlZVxuICAgKiByZXByZXNlbnRhdGlvbiwgd2l0aG91dCBmbGF0dGVuaW5nIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19yZW5kZXJUb0RvbVRyZWU6IHJlbmRlclRvRG9tVHJlZSxcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZ2l2ZW4gTGFUZVggaW50byBhbiBIVE1MIGludGVybmFsIERPTSB0cmVlIHJlcHJlc2VudGF0aW9uLFxuICAgKiB3aXRob3V0IE1hdGhNTCBhbmQgd2l0aG91dCBmbGF0dGVuaW5nIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIG5vdCBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHB1YmxpYyB1c2UuXG4gICAqIFRoZSBpbnRlcm5hbCB0cmVlIHJlcHJlc2VudGF0aW9uIGlzIHVuc3RhYmxlIGFuZCBpcyB2ZXJ5IGxpa2VseVxuICAgKiB0byBjaGFuZ2UuIFVzZSBhdCB5b3VyIG93biByaXNrLlxuICAgKi9cbiAgX19yZW5kZXJUb0hUTUxUcmVlOiByZW5kZXJUb0hUTUxUcmVlLFxuXG4gIC8qKlxuICAgKiBleHRlbmRzIGludGVybmFsIGZvbnQgbWV0cmljcyBvYmplY3Qgd2l0aCBhIG5ldyBvYmplY3RcbiAgICogZWFjaCBrZXkgaW4gdGhlIG5ldyBvYmplY3QgcmVwcmVzZW50cyBhIGZvbnQgbmFtZVxuICAqL1xuICBfX3NldEZvbnRNZXRyaWNzOiBzZXRGb250TWV0cmljcyxcblxuICAvKipcbiAgICogYWRkcyBhIG5ldyBzeW1ib2wgdG8gYnVpbHRpbiBzeW1ib2xzIHRhYmxlXG4gICAqL1xuICBfX2RlZmluZVN5bWJvbDogZGVmaW5lU3ltYm9sLFxuXG4gIC8qKlxuICAgKiBhZGRzIGEgbmV3IGZ1bmN0aW9uIHRvIGJ1aWx0aW4gZnVuY3Rpb24gbGlzdCxcbiAgICogd2hpY2ggZGlyZWN0bHkgcHJvZHVjZSBwYXJzZSB0cmVlIGVsZW1lbnRzXG4gICAqIGFuZCBoYXZlIHRoZWlyIG93biBodG1sL21hdGhtbCBidWlsZGVyc1xuICAgKi9cbiAgX19kZWZpbmVGdW5jdGlvbjogZGVmaW5lRnVuY3Rpb24sXG5cbiAgLyoqXG4gICAqIGFkZHMgYSBuZXcgbWFjcm8gdG8gYnVpbHRpbiBtYWNybyBsaXN0XG4gICAqL1xuICBfX2RlZmluZU1hY3JvOiBkZWZpbmVNYWNybyxcblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBkb20gdHJlZSBub2RlIHR5cGVzLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciB0eXBlIGNoZWNraW5nIG5vZGVzLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciBwdWJsaWMgdXNlLlxuICAgKiBUaGUgaW50ZXJuYWwgdHJlZSByZXByZXNlbnRhdGlvbiBpcyB1bnN0YWJsZSBhbmQgaXMgdmVyeSBsaWtlbHlcbiAgICogdG8gY2hhbmdlLiBVc2UgYXQgeW91ciBvd24gcmlzay5cbiAgICovXG4gIF9fZG9tVHJlZToge1xuICAgIFNwYW4sXG4gICAgQW5jaG9yLFxuICAgIFN5bWJvbE5vZGUsXG4gICAgU3ZnTm9kZSxcbiAgICBQYXRoTm9kZSxcbiAgICBMaW5lTm9kZVxuICB9XG59O1xuXG5leHBvcnQgeyBrYXRleCBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOlsiU291cmNlTG9jYXRpb24iLCJjb25zdHJ1Y3RvciIsImxleGVyIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsImZpcnN0Iiwic2Vjb25kIiwibG9jIiwiVG9rZW4iLCJ0ZXh0Iiwibm9leHBhbmQiLCJ0cmVhdEFzUmVsYXgiLCJlbmRUb2tlbiIsIlBhcnNlRXJyb3IiLCJtZXNzYWdlIiwidG9rZW4iLCJuYW1lIiwicG9zaXRpb24iLCJsZW5ndGgiLCJyYXdNZXNzYWdlIiwiZXJyb3IiLCJpbnB1dCIsInVuZGVybGluZWQiLCJzbGljZSIsInJlcGxhY2UiLCJsZWZ0IiwicmlnaHQiLCJzZWxmIiwiRXJyb3IiLCJfX3Byb3RvX18iLCJwcm90b3R5cGUiLCJjb250YWlucyIsImxpc3QiLCJlbGVtIiwiaW5kZXhPZiIsImRlZmx0Iiwic2V0dGluZyIsImRlZmF1bHRJZlVuZGVmaW5lZCIsInVuZGVmaW5lZCIsInVwcGVyY2FzZSIsImh5cGhlbmF0ZSIsInN0ciIsInRvTG93ZXJDYXNlIiwiRVNDQVBFX0xPT0tVUCIsIkVTQ0FQRV9SRUdFWCIsImVzY2FwZSIsIlN0cmluZyIsIm1hdGNoIiwiZ2V0QmFzZUVsZW0iLCJncm91cCIsInR5cGUiLCJib2R5IiwiaXNDaGFyYWN0ZXJCb3giLCJiYXNlRWxlbSIsImFzc2VydCIsInZhbHVlIiwicHJvdG9jb2xGcm9tVXJsIiwidXJsIiwicHJvdG9jb2wiLCJleGVjIiwidXRpbHMiLCJTRVRUSU5HU19TQ0hFTUEiLCJkaXNwbGF5TW9kZSIsImRlc2NyaXB0aW9uIiwiY2xpIiwib3V0cHV0IiwiZW51bSIsImxlcW5vIiwiZmxlcW4iLCJ0aHJvd09uRXJyb3IiLCJkZWZhdWx0IiwiY2xpRGVzY3JpcHRpb24iLCJlcnJvckNvbG9yIiwiY2xpUHJvY2Vzc29yIiwiY29sb3IiLCJtYWNyb3MiLCJjbGlEZWZhdWx0IiwiZGVmIiwiZGVmcyIsInB1c2giLCJtaW5SdWxlVGhpY2tuZXNzIiwicHJvY2Vzc29yIiwidCIsIk1hdGgiLCJtYXgiLCJwYXJzZUZsb2F0IiwiY29sb3JJc1RleHRDb2xvciIsInN0cmljdCIsInRydXN0IiwibWF4U2l6ZSIsIkluZmluaXR5IiwicyIsInBhcnNlSW50IiwibWF4RXhwYW5kIiwibiIsImdsb2JhbEdyb3VwIiwiZ2V0RGVmYXVsdFZhbHVlIiwic2NoZW1hIiwiZGVmYXVsdFR5cGUiLCJBcnJheSIsImlzQXJyYXkiLCJTZXR0aW5ncyIsIm9wdGlvbnMiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJyZXBvcnROb25zdHJpY3QiLCJlcnJvckNvZGUiLCJlcnJvck1zZyIsImNvbnNvbGUiLCJ3YXJuIiwidXNlU3RyaWN0QmVoYXZpb3IiLCJpc1RydXN0ZWQiLCJjb250ZXh0IiwiQm9vbGVhbiIsIlN0eWxlIiwiaWQiLCJzaXplIiwiY3JhbXBlZCIsInN1cCIsInN0eWxlcyIsInN1YiIsImZyYWNOdW0iLCJmcmFjRGVuIiwiY3JhbXAiLCJ0ZXh0JDEiLCJpc1RpZ2h0IiwiRCIsIkRjIiwiVCIsIlRjIiwiUyIsIlNjIiwiU1MiLCJTU2MiLCJTdHlsZSQxIiwiRElTUExBWSIsIlRFWFQiLCJTQ1JJUFQiLCJTQ1JJUFRTQ1JJUFQiLCJzY3JpcHREYXRhIiwiYmxvY2tzIiwic2NyaXB0RnJvbUNvZGVwb2ludCIsImNvZGVwb2ludCIsImkiLCJzY3JpcHQiLCJfaSIsImJsb2NrIiwiYWxsQmxvY2tzIiwiZm9yRWFjaCIsImIiLCJzdXBwb3J0ZWRDb2RlcG9pbnQiLCJoTGluZVBhZCIsInNxcnRNYWluIiwiZXh0cmFWaW5jdWx1bSIsInNxcnRTaXplMSIsInNxcnRTaXplMiIsInNxcnRTaXplMyIsInNxcnRTaXplNCIsInBoYXNlUGF0aCIsInkiLCJ4Iiwic3FydFRhbGwiLCJ2aWV3Qm94SGVpZ2h0IiwidmVydFNlZ21lbnQiLCJzcXJ0UGF0aCIsInBhdGgiLCJpbm5lclBhdGgiLCJoZWlnaHQiLCJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93IiwibGVmdGFycm93IiwibGVmdGJyYWNlIiwibGVmdGJyYWNldW5kZXIiLCJsZWZ0Z3JvdXAiLCJsZWZ0Z3JvdXB1bmRlciIsImxlZnRoYXJwb29uIiwibGVmdGhhcnBvb25wbHVzIiwibGVmdGhhcnBvb25kb3duIiwibGVmdGhhcnBvb25kb3ducGx1cyIsImxlZnRob29rIiwibGVmdGxpbmVzZWdtZW50IiwibGVmdG1hcHN0byIsImxlZnRUb0Zyb20iLCJsb25nZXF1YWwiLCJtaWRicmFjZSIsIm1pZGJyYWNldW5kZXIiLCJvaWludFNpemUxIiwib2lpbnRTaXplMiIsIm9paWludFNpemUxIiwib2lpaW50U2l6ZTIiLCJyaWdodGFycm93IiwicmlnaHRicmFjZSIsInJpZ2h0YnJhY2V1bmRlciIsInJpZ2h0Z3JvdXAiLCJyaWdodGdyb3VwdW5kZXIiLCJyaWdodGhhcnBvb24iLCJyaWdodGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93biIsInJpZ2h0aGFycG9vbmRvd25wbHVzIiwicmlnaHRob29rIiwicmlnaHRsaW5lc2VnbWVudCIsInJpZ2h0VG9Gcm9tIiwidHdvaGVhZGxlZnRhcnJvdyIsInR3b2hlYWRyaWdodGFycm93IiwidGlsZGUxIiwidGlsZGUyIiwidGlsZGUzIiwidGlsZGU0IiwidmVjIiwid2lkZWhhdDEiLCJ3aWRlaGF0MiIsIndpZGVoYXQzIiwid2lkZWhhdDQiLCJ3aWRlY2hlY2sxIiwid2lkZWNoZWNrMiIsIndpZGVjaGVjazMiLCJ3aWRlY2hlY2s0IiwiYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiLCJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb24iLCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyIiwic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uIiwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhciIsInRhbGxEZWxpbSIsImxhYmVsIiwibWlkSGVpZ2h0IiwiRG9jdW1lbnRGcmFnbWVudCIsImNoaWxkcmVuIiwiY2xhc3NlcyIsImRlcHRoIiwibWF4Rm9udFNpemUiLCJzdHlsZSIsImhhc0NsYXNzIiwiY2xhc3NOYW1lIiwidG9Ob2RlIiwiZnJhZyIsImRvY3VtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImFwcGVuZENoaWxkIiwidG9NYXJrdXAiLCJtYXJrdXAiLCJ0b1RleHQiLCJjaGlsZCIsIm1hcCIsImpvaW4iLCJmb250TWV0cmljc0RhdGEiLCJzaWdtYXNBbmRYaXMiLCJzbGFudCIsInNwYWNlIiwic3RyZXRjaCIsInNocmluayIsInhIZWlnaHQiLCJxdWFkIiwiZXh0cmFTcGFjZSIsIm51bTEiLCJudW0yIiwibnVtMyIsImRlbm9tMSIsImRlbm9tMiIsInN1cDEiLCJzdXAyIiwic3VwMyIsInN1YjEiLCJzdWIyIiwic3VwRHJvcCIsInN1YkRyb3AiLCJkZWxpbTEiLCJkZWxpbTIiLCJheGlzSGVpZ2h0IiwiZGVmYXVsdFJ1bGVUaGlja25lc3MiLCJiaWdPcFNwYWNpbmcxIiwiYmlnT3BTcGFjaW5nMiIsImJpZ09wU3BhY2luZzMiLCJiaWdPcFNwYWNpbmc0IiwiYmlnT3BTcGFjaW5nNSIsInNxcnRSdWxlVGhpY2tuZXNzIiwicHRQZXJFbSIsImRvdWJsZVJ1bGVTZXAiLCJhcnJheVJ1bGVXaWR0aCIsImZib3hzZXAiLCJmYm94cnVsZSIsImV4dHJhQ2hhcmFjdGVyTWFwIiwic2V0Rm9udE1ldHJpY3MiLCJmb250TmFtZSIsIm1ldHJpY3MiLCJnZXRDaGFyYWN0ZXJNZXRyaWNzIiwiY2hhcmFjdGVyIiwiZm9udCIsIm1vZGUiLCJjaCIsImNoYXJDb2RlQXQiLCJpdGFsaWMiLCJza2V3Iiwid2lkdGgiLCJmb250TWV0cmljc0J5U2l6ZUluZGV4IiwiZ2V0R2xvYmFsTWV0cmljcyIsInNpemVJbmRleCIsImNzc0VtUGVyTXUiLCJrZXkiLCJzaXplU3R5bGVNYXAiLCJzaXplTXVsdGlwbGllcnMiLCJzaXplQXRTdHlsZSIsIk9wdGlvbnMiLCJkYXRhIiwidGV4dFNpemUiLCJwaGFudG9tIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJmb250U2hhcGUiLCJzaXplTXVsdGlwbGllciIsIl9mb250TWV0cmljcyIsIkJBU0VTSVpFIiwiZXh0ZW5kIiwiZXh0ZW5zaW9uIiwiaGF2aW5nU3R5bGUiLCJoYXZpbmdDcmFtcGVkU3R5bGUiLCJoYXZpbmdTaXplIiwiaGF2aW5nQmFzZVN0eWxlIiwid2FudFNpemUiLCJoYXZpbmdCYXNlU2l6aW5nIiwid2l0aENvbG9yIiwid2l0aFBoYW50b20iLCJ3aXRoRm9udCIsIndpdGhUZXh0Rm9udEZhbWlseSIsIndpdGhUZXh0Rm9udFdlaWdodCIsIndpdGhUZXh0Rm9udFNoYXBlIiwic2l6aW5nQ2xhc3NlcyIsIm9sZE9wdGlvbnMiLCJiYXNlU2l6aW5nQ2xhc3NlcyIsImZvbnRNZXRyaWNzIiwiZ2V0Q29sb3IiLCJwdFBlclVuaXQiLCJyZWxhdGl2ZVVuaXQiLCJ2YWxpZFVuaXQiLCJ1bml0IiwiY2FsY3VsYXRlU2l6ZSIsInNpemVWYWx1ZSIsInNjYWxlIiwidW5pdE9wdGlvbnMiLCJtaW4iLCJudW1iZXIiLCJtYWtlRW0iLCJ0b0ZpeGVkIiwiY3JlYXRlQ2xhc3MiLCJmaWx0ZXIiLCJjbHMiLCJpbml0Tm9kZSIsImF0dHJpYnV0ZXMiLCJ0YWdOYW1lIiwibm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyIiwic2V0QXR0cmlidXRlIiwiU3BhbiIsImNhbGwiLCJhdHRyaWJ1dGUiLCJBbmNob3IiLCJocmVmIiwiSW1nIiwic3JjIiwiYWx0IiwiaUNvbWJpbmF0aW9ucyIsIlN5bWJvbE5vZGUiLCJ0ZXN0IiwiY3JlYXRlVGV4dE5vZGUiLCJzcGFuIiwibWFyZ2luUmlnaHQiLCJuZWVkc1NwYW4iLCJlc2NhcGVkIiwiU3ZnTm9kZSIsInN2Z05TIiwiY3JlYXRlRWxlbWVudE5TIiwiT2JqZWN0IiwiUGF0aE5vZGUiLCJwYXRoTmFtZSIsImFsdGVybmF0ZSIsIkxpbmVOb2RlIiwiYXNzZXJ0U3ltYm9sRG9tTm9kZSIsImFzc2VydFNwYW4iLCJBVE9NUyIsIk5PTl9BVE9NUyIsInN5bWJvbHMiLCJkZWZpbmVTeW1ib2wiLCJhY2NlcHRVbmljb2RlQ2hhciIsIm1hdGgiLCJtYWluIiwiYW1zIiwiYWNjZW50IiwiYmluIiwiY2xvc2UiLCJpbm5lciIsIm1hdGhvcmQiLCJvcCIsIm9wZW4iLCJwdW5jdCIsInJlbCIsInNwYWNpbmciLCJ0ZXh0b3JkIiwibGlnYXR1cmVzIiwibWF0aFRleHRTeW1ib2xzIiwiY2hhckF0IiwidGV4dFN5bWJvbHMiLCJfY2giLCJsZXR0ZXJzIiwiX2kyIiwiX2NoMiIsIndpZGVDaGFyIiwiX2kzIiwiX2NoMyIsImZyb21DaGFyQ29kZSIsIl9pNCIsIl9jaDQiLCJ0b1N0cmluZyIsImV4dHJhTGF0aW4iLCJfaTUiLCJfY2g1Iiwid2lkZUxhdGluTGV0dGVyRGF0YSIsIndpZGVOdW1lcmFsRGF0YSIsIndpZGVDaGFyYWN0ZXJGb250IiwiSCIsIkwiLCJjb2RlUG9pbnQiLCJqIiwiZmxvb3IiLCJsb29rdXBTeW1ib2wiLCJtYWtlU3ltYm9sIiwibG9va3VwIiwic3ltYm9sTm9kZSIsIm1hdGhzeW0iLCJjb25jYXQiLCJib2xkc3ltYm9sIiwiZm9udENsYXNzIiwibWFrZU9yZCIsImlzRm9udCIsImZvbnRPckZhbWlseSIsIndpZGVGb250TmFtZSIsIndpZGVGb250Q2xhc3MiLCJmb250Q2xhc3NlcyIsImZvbnREYXRhIiwiZm9udE1hcCIsInJldHJpZXZlVGV4dEZvbnROYW1lIiwicGFydHMiLCJtYWtlRnJhZ21lbnQiLCJfZm9udE5hbWUiLCJfZm9udE5hbWUyIiwiX2ZvbnROYW1lMyIsImNhbkNvbWJpbmUiLCJwcmV2IiwibmV4dCIsIl9zdHlsZSIsInRyeUNvbWJpbmVDaGFycyIsImNoYXJzIiwic3BsaWNlIiwic2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4iLCJtYWtlU3BhbiQyIiwibWFrZVNwYW4iLCJtYWtlU3ZnU3BhbiIsIm1ha2VMaW5lU3BhbiIsInRoaWNrbmVzcyIsImxpbmUiLCJib3JkZXJCb3R0b21XaWR0aCIsIm1ha2VBbmNob3IiLCJhbmNob3IiLCJmcmFnbWVudCIsIndyYXBGcmFnbWVudCIsImdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCIsInBhcmFtcyIsInBvc2l0aW9uVHlwZSIsIm9sZENoaWxkcmVuIiwiX2RlcHRoIiwic2hpZnQiLCJjdXJyUG9zIiwiZGlmZiIsImJvdHRvbSIsInBvc2l0aW9uRGF0YSIsImZpcnN0Q2hpbGQiLCJtYWtlVkxpc3QiLCJwc3RydXRTaXplIiwicHN0cnV0IiwicmVhbENoaWxkcmVuIiwibWluUG9zIiwibWF4UG9zIiwiX2NoaWxkIiwiX2VsZW0iLCJ3cmFwcGVyQ2xhc3NlcyIsIndyYXBwZXJTdHlsZSIsImNoaWxkV3JhcCIsInRvcCIsIm1hcmdpbkxlZnQiLCJ2bGlzdCIsInJvd3MiLCJlbXB0eVNwYW4iLCJkZXB0aFN0cnV0IiwidG9wU3RydXQiLCJ2dGFibGUiLCJtYWtlR2x1ZSIsIm1lYXN1cmVtZW50IiwicnVsZSIsImJhc2VGb250TmFtZSIsImZvbnRTdHlsZXNOYW1lIiwidmFyaWFudCIsInN2Z0RhdGEiLCJzdGF0aWNTdmciLCJzdmdOb2RlIiwiYnVpbGRDb21tb24iLCJ0aGluc3BhY2UiLCJtZWRpdW1zcGFjZSIsInRoaWNrc3BhY2UiLCJzcGFjaW5ncyIsIm1vcmQiLCJtb3AiLCJtYmluIiwibXJlbCIsIm1pbm5lciIsIm1vcGVuIiwibWNsb3NlIiwibXB1bmN0IiwidGlnaHRTcGFjaW5ncyIsIl9mdW5jdGlvbnMiLCJfaHRtbEdyb3VwQnVpbGRlcnMiLCJfbWF0aG1sR3JvdXBCdWlsZGVycyIsImRlZmluZUZ1bmN0aW9uIiwiX3JlZiIsIm5hbWVzIiwicHJvcHMiLCJoYW5kbGVyIiwiaHRtbEJ1aWxkZXIiLCJtYXRobWxCdWlsZGVyIiwibnVtQXJncyIsImFyZ1R5cGVzIiwiYWxsb3dlZEluQXJndW1lbnQiLCJhbGxvd2VkSW5UZXh0IiwiYWxsb3dlZEluTWF0aCIsIm51bU9wdGlvbmFsQXJncyIsImluZml4IiwicHJpbWl0aXZlIiwiZGVmaW5lRnVuY3Rpb25CdWlsZGVycyIsIl9yZWYyIiwibm9ybWFsaXplQXJndW1lbnQiLCJhcmciLCJvcmRhcmd1bWVudCIsIm1ha2VTcGFuJDEiLCJiaW5MZWZ0Q2FuY2VsbGVyIiwiYmluUmlnaHRDYW5jZWxsZXIiLCJzdHlsZU1hcCQxIiwiRG9tRW51bSIsImJ1aWxkRXhwcmVzc2lvbiQxIiwiYnVpbGRFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsImlzUmVhbEdyb3VwIiwic3Vycm91bmRpbmciLCJncm91cHMiLCJidWlsZEdyb3VwJDEiLCJnbHVlT3B0aW9ucyIsImR1bW15UHJldiIsImR1bW15TmV4dCIsImlzUm9vdCIsInRyYXZlcnNlTm9uU3BhY2VOb2RlcyIsInByZXZUeXBlIiwiZ2V0VHlwZU9mRG9tVHJlZSIsIm5vZGVzIiwiY2FsbGJhY2siLCJwYXJ0aWFsR3JvdXAiLCJjaGVja1BhcnRpYWxHcm91cCIsIm5vbnNwYWNlIiwicmVzdWx0IiwiaW5zZXJ0QWZ0ZXIiLCJ1bnNoaWZ0IiwiaW5kZXgiLCJwb3AiLCJnZXRPdXRlcm1vc3ROb2RlIiwic2lkZSIsIm1ha2VOdWxsRGVsaW1pdGVyIiwibW9yZUNsYXNzZXMiLCJidWlsZEdyb3VwIiwiYmFzZU9wdGlvbnMiLCJncm91cE5vZGUiLCJtdWx0aXBsaWVyIiwiYnVpbGRIVE1MVW5icmVha2FibGUiLCJzdHJ1dCIsInZlcnRpY2FsQWxpZ24iLCJidWlsZEhUTUwiLCJ0cmVlIiwidGFnIiwiZXFuTnVtIiwibm9icmVhayIsInRhZ0NoaWxkIiwiaHRtbE5vZGUiLCJuZXdEb2N1bWVudEZyYWdtZW50IiwiTWF0aE5vZGUiLCJnZXRBdHRyaWJ1dGUiLCJUZXh0Tm9kZSIsIlNwYWNlTm9kZSIsIm1hdGhNTFRyZWUiLCJtYWtlVGV4dCIsIm1ha2VSb3ciLCJnZXRWYXJpYW50IiwiaXNPcmRncm91cCIsImxhc3RHcm91cCIsIl9ncm91cCIsImxhc3RDaGlsZCIsImJ1aWxkRXhwcmVzc2lvblJvdyIsImJ1aWxkTWF0aE1MIiwidGV4RXhwcmVzc2lvbiIsImlzRGlzcGxheU1vZGUiLCJmb3JNYXRobWxPbmx5Iiwid3JhcHBlciIsImFubm90YXRpb24iLCJzZW1hbnRpY3MiLCJ3cmFwcGVyQ2xhc3MiLCJvcHRpb25zRnJvbVNldHRpbmdzIiwic2V0dGluZ3MiLCJkaXNwbGF5V3JhcCIsImJ1aWxkVHJlZSIsImthdGV4Tm9kZSIsIm1hdGhNTE5vZGUiLCJfaHRtbE5vZGUiLCJidWlsZEhUTUxUcmVlIiwic3RyZXRjaHlDb2RlUG9pbnQiLCJ3aWRlaGF0Iiwid2lkZWNoZWNrIiwid2lkZXRpbGRlIiwidXRpbGRlIiwib3ZlcmxlZnRhcnJvdyIsInVuZGVybGVmdGFycm93IiwieGxlZnRhcnJvdyIsIm92ZXJyaWdodGFycm93IiwidW5kZXJyaWdodGFycm93IiwieHJpZ2h0YXJyb3ciLCJ1bmRlcmJyYWNlIiwib3ZlcmJyYWNlIiwib3Zlcmdyb3VwIiwidW5kZXJncm91cCIsIm92ZXJsZWZ0cmlnaHRhcnJvdyIsInVuZGVybGVmdHJpZ2h0YXJyb3ciLCJ4bGVmdHJpZ2h0YXJyb3ciLCJPdmVycmlnaHRhcnJvdyIsInhSaWdodGFycm93Iiwib3ZlcmxlZnRoYXJwb29uIiwieGxlZnRoYXJwb29udXAiLCJvdmVycmlnaHRoYXJwb29uIiwieHJpZ2h0aGFycG9vbnVwIiwieExlZnRhcnJvdyIsInhMZWZ0cmlnaHRhcnJvdyIsInhob29rbGVmdGFycm93IiwieGhvb2tyaWdodGFycm93IiwieG1hcHN0byIsInhyaWdodGhhcnBvb25kb3duIiwieGxlZnRoYXJwb29uZG93biIsInhyaWdodGxlZnRoYXJwb29ucyIsInhsZWZ0cmlnaHRoYXJwb29ucyIsInh0d29oZWFkbGVmdGFycm93IiwieHR3b2hlYWRyaWdodGFycm93IiwieGxvbmdlcXVhbCIsInh0b2Zyb20iLCJ4cmlnaHRsZWZ0YXJyb3dzIiwieHJpZ2h0ZXF1aWxpYnJpdW0iLCJ4bGVmdGVxdWlsaWJyaXVtIiwibWF0aE1Mbm9kZSIsImthdGV4SW1hZ2VzRGF0YSIsIm92ZXJsaW5lc2VnbWVudCIsInVuZGVybGluZXNlZ21lbnQiLCJncm91cExlbmd0aCIsInN2Z1NwYW4iLCJidWlsZFN2Z1NwYW5fIiwidmlld0JveFdpZHRoIiwiZ3JwIiwibnVtQ2hhcnMiLCJiYXNlIiwiX2hlaWdodCIsImltZ0luZGV4IiwibWluV2lkdGgiLCJzcGFucyIsInBhdGhzIiwiX21pbldpZHRoIiwiX3ZpZXdCb3hIZWlnaHQiLCJfaGVpZ2h0MiIsIm51bVN2Z0NoaWxkcmVuIiwid2lkdGhDbGFzc2VzIiwiYWxpZ25zIiwiYWxpZ24xIiwiX3BhdGgiLCJfc3ZnTm9kZSIsIl9zcGFuIiwiZW5jbG9zZVNwYW4iLCJ0b3BQYWQiLCJib3R0b21QYWQiLCJpbWciLCJ0b3RhbEhlaWdodCIsImJvcmRlckNvbG9yIiwibGluZXMiLCJzdHJldGNoeSIsImFzc2VydE5vZGVUeXBlIiwiYXNzZXJ0U3ltYm9sTm9kZVR5cGUiLCJ0eXBlZE5vZGUiLCJjaGVja1N5bWJvbE5vZGVUeXBlIiwiaHRtbEJ1aWxkZXIkYSIsInN1cFN1Ykdyb3VwIiwibXVzdFNoaWZ0IiwiaXNTaGlmdHkiLCJiYXNlQ2hhciIsImJhc2VHcm91cCIsImFjY2VudEJlbG93IiwiY2xlYXJhbmNlIiwiYWNjZW50Qm9keSIsImlzU3RyZXRjaHkiLCJhY2NlbnRGdWxsIiwiYWNjZW50V3JhcCIsIm1hdGhtbEJ1aWxkZXIkOSIsImFjY2VudE5vZGUiLCJOT05fU1RSRVRDSFlfQUNDRU5UX1JFR0VYIiwiUmVnRXhwIiwiYXJncyIsImZ1bmNOYW1lIiwicGFyc2VyIiwiaW5uZXJHcm91cCIsImtlcm4iLCJwYWRkZWROb2RlIiwib3B0QXJncyIsImJlbG93IiwibmV3T3B0aW9ucyIsInVwcGVyR3JvdXAiLCJhcnJvd1ByZWZpeCIsImxvd2VyR3JvdXAiLCJhcnJvd0JvZHkiLCJhcnJvd1NoaWZ0IiwidXBwZXJTaGlmdCIsImxvd2VyU2hpZnQiLCJhcnJvd05vZGUiLCJ1cHBlck5vZGUiLCJsb3dlck5vZGUiLCJfbG93ZXJOb2RlIiwiaHRtbEJ1aWxkZXIkOSIsImVsZW1lbnRzIiwibWNsYXNzIiwibWF0aG1sQnVpbGRlciQ4IiwibHNwYWNlIiwicnNwYWNlIiwiYmlucmVsQ2xhc3MiLCJhdG9tIiwiZmFtaWx5IiwiX3JlZjMiLCJiYXNlQXJnIiwic2hpZnRlZEFyZyIsImJhc2VPcCIsImxpbWl0cyIsImFsd2F5c0hhbmRsZVN1cFN1YiIsInBhcmVudElzU3VwU3ViIiwic3ltYm9sIiwic3VwcHJlc3NCYXNlU2hpZnQiLCJzdXBzdWIiLCJ0ZXh0U2hhZG93IiwiY2RBcnJvd0Z1bmN0aW9uTmFtZSIsIm5ld0NlbGwiLCJpc1N0YXJ0T2ZBcnJvdyIsImlzTGFiZWxFbmQiLCJlbmRDaGFyIiwiY2RBcnJvdyIsImFycm93Q2hhciIsImxhYmVscyIsImNhbGxGdW5jdGlvbiIsImxlZnRMYWJlbCIsImJhcmVBcnJvdyIsInNpemVkQXJyb3ciLCJyaWdodExhYmVsIiwiYXJyb3dHcm91cCIsImFycm93IiwicGFyc2VDRCIsInBhcnNlZFJvd3MiLCJndWxsZXQiLCJiZWdpbkdyb3VwIiwic2V0IiwicGFyc2VFeHByZXNzaW9uIiwiZW5kR3JvdXAiLCJmZXRjaCIsImNvbnN1bWUiLCJuZXh0VG9rZW4iLCJyb3ciLCJyb3dOb2RlcyIsImNlbGwiLCJsYWJlbE51bSIsImluTGFiZWwiLCJrIiwid3JhcHBlZEFycm93IiwiY29scyIsImZpbGwiLCJhbGlnbiIsInByZWdhcCIsInBvc3RnYXAiLCJhcnJheXN0cmV0Y2giLCJhZGRKb3QiLCJyb3dHYXBzIiwiY29sU2VwYXJhdGlvblR5cGUiLCJoTGluZXNCZWZvcmVSb3ciLCJwYXJlbnQiLCJjb2RlIiwiaXNOYU4iLCJodG1sQnVpbGRlciQ4IiwibWF0aG1sQnVpbGRlciQ3IiwiYnJlYWtPblRva2VuVGV4dCIsImZ1dHVyZSIsInBhcnNlU2l6ZUdyb3VwIiwibmV3TGluZSIsIm1hcmdpblRvcCIsImdsb2JhbE1hcCIsImNoZWNrQ29udHJvbFNlcXVlbmNlIiwidG9rIiwiZ2V0UkhTIiwicG9wVG9rZW4iLCJsZXRDb21tYW5kIiwiZ2xvYmFsIiwibWFjcm8iLCJnZXQiLCJ0b2tlbnMiLCJ1bmV4cGFuZGFibGUiLCJpc0V4cGFuZGFibGUiLCJjb25zdW1lU3BhY2VzIiwicGFyc2VGdW5jdGlvbiIsImluc2VydCIsImRlbGltaXRlcnMiLCJjb25zdW1lQXJnIiwiZXhwYW5kVG9rZW5zIiwicmV2ZXJzZSIsIl9yZWY0IiwibWlkZGxlIiwicHVzaFRva2VuIiwiZ2V0TWV0cmljcyIsInN0eWxlV3JhcCIsImRlbGltIiwidG9TdHlsZSIsImRlbGltU2l6ZU11bHRpcGxpZXIiLCJjZW50ZXJTcGFuIiwibWFrZVNtYWxsRGVsaW0iLCJjZW50ZXIiLCJtYXRocm1TaXplIiwibWFrZUxhcmdlRGVsaW0iLCJtYWtlR2x5cGhTcGFuIiwic2l6ZUNsYXNzIiwiY29ybmVyIiwibWFrZUlubmVyIiwicm91bmQiLCJsYXBJbkVtcyIsImxhcCIsInZlcnRzIiwiZG91YmxlVmVydHMiLCJtYWtlU3RhY2tlZERlbGltIiwiaGVpZ2h0VG90YWwiLCJyZXBlYXQiLCJzdmdMYWJlbCIsInRvcE1ldHJpY3MiLCJ0b3BIZWlnaHRUb3RhbCIsInJlcGVhdE1ldHJpY3MiLCJyZXBlYXRIZWlnaHRUb3RhbCIsImJvdHRvbU1ldHJpY3MiLCJib3R0b21IZWlnaHRUb3RhbCIsIm1pZGRsZUhlaWdodFRvdGFsIiwibWlkZGxlRmFjdG9yIiwibWlkZGxlTWV0cmljcyIsIm1pbkhlaWdodCIsInJlcGVhdENvdW50IiwiY2VpbCIsInJlYWxIZWlnaHRUb3RhbCIsInN0YWNrIiwicGF0aFN0ciIsInN2ZyIsImlubmVySGVpZ2h0IiwiX2lubmVySGVpZ2h0IiwidmJQYWQiLCJlbVBhZCIsInNxcnRTdmciLCJzcXJ0TmFtZSIsInBhdGhOb2RlIiwibWFrZVNxcnRJbWFnZSIsInRyYXZlcnNlU2VxdWVuY2UiLCJzdGFja0xhcmdlRGVsaW1pdGVyU2VxdWVuY2UiLCJzcGFuSGVpZ2h0IiwidGV4SGVpZ2h0IiwiYWR2YW5jZVdpZHRoIiwic2l6ZVRvTWF4SGVpZ2h0IiwicnVsZVdpZHRoIiwic3RhY2tMYXJnZURlbGltaXRlcnMiLCJzdGFja0Fsd2F5c0RlbGltaXRlcnMiLCJzdGFja05ldmVyRGVsaW1pdGVycyIsIm1ha2VTaXplZERlbGltIiwic3RhY2tOZXZlckRlbGltaXRlclNlcXVlbmNlIiwic3RhY2tBbHdheXNEZWxpbWl0ZXJTZXF1ZW5jZSIsImRlbGltVHlwZVRvRm9udCIsInNlcXVlbmNlIiwiaGVpZ2h0RGVwdGgiLCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIsImRlbGltVHlwZSIsIm1ha2VMZWZ0UmlnaHREZWxpbSIsImRlbGltaXRlckZhY3RvciIsImRlbGltaXRlckV4dGVuZCIsIm1heERpc3RGcm9tQXhpcyIsImRlbGltaXRlciIsInNxcnRJbWFnZSIsInNpemVkRGVsaW0iLCJjdXN0b21TaXplZERlbGltIiwibGVmdFJpZ2h0RGVsaW0iLCJkZWxpbWl0ZXJTaXplcyIsImNoZWNrRGVsaW1pdGVyIiwic3ltRGVsaW0iLCJhc3NlcnRQYXJzZWQiLCJsZWZ0cmlnaHREZXB0aCIsImV4cGVjdCIsInJpZ2h0Q29sb3IiLCJpbm5lckRlcHRoIiwiaGFkTWlkZGxlIiwiaXNNaWRkbGUiLCJsZWZ0RGVsaW0iLCJtaWRkbGVEZWxpbSIsInJpZ2h0RGVsaW0iLCJjb2xvck9wdGlvbnMiLCJsZWZ0Tm9kZSIsInJpZ2h0Tm9kZSIsInRleHROb2RlIiwibWlkZGxlTm9kZSIsImh0bWxCdWlsZGVyJDciLCJpbWdTaGlmdCIsImlzU2luZ2xlQ2hhciIsImxpbmVXZWlnaHQiLCJhbmdsZUhlaWdodCIsInBhZGRpbmdMZWZ0IiwicnVsZVRoaWNrbmVzcyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXRobWxCdWlsZGVyJDYiLCJ0aGsiLCJfcmVmNSIsIl9lbnZpcm9ubWVudHMiLCJkZWZpbmVFbnZpcm9ubWVudCIsIl9tYWNyb3MiLCJkZWZpbmVNYWNybyIsImdldEhMaW5lcyIsImhsaW5lSW5mbyIsIm54dCIsInZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0IiwiZW52TmFtZSIsImdldEF1dG9UYWciLCJwYXJzZUFycmF5IiwiaHNraXBCZWZvcmVBbmRBZnRlciIsImF1dG9UYWciLCJzaW5nbGVSb3ciLCJlbXB0eVNpbmdsZVJvdyIsIm1heE51bUNvbHMiLCJleHBhbmRNYWNyb0FzVGV4dCIsInRhZ3MiLCJiZWdpblJvdyIsImVuZFJvdyIsInN1YnBhcnNlIiwiZENlbGxTdHlsZSIsImh0bWxCdWlsZGVyJDYiLCJyIiwiYyIsIm5yIiwibmMiLCJobGluZXMiLCJwdCIsImFycmF5Y29sc2VwIiwibG9jYWxNdWx0aXBsaWVyIiwiYmFzZWxpbmVza2lwIiwiam90IiwiYXJyYXlza2lwIiwiYXJzdHJ1dEhlaWdodCIsImFyc3RydXREZXB0aCIsInNldEhMaW5lUG9zIiwiaGxpbmVzSW5HYXAiLCJwb3MiLCJpc0Rhc2hlZCIsImlucm93Iiwib3V0cm93IiwiZWx0Iiwicm93R2FwIiwiZ2FwIiwib2Zmc2V0IiwiY29sRGVzY3JpcHRpb25zIiwiY29sU2VwIiwiY29sRGVzY3JOdW0iLCJ0YWdTcGFucyIsInNvbWUiLCJydyIsInRhZ1NwYW4iLCJjb2xEZXNjciIsImZpcnN0U2VwYXJhdG9yIiwic2VwYXJhdG9yIiwibGluZVR5cGUiLCJib3JkZXJSaWdodFN0eWxlIiwibWFyZ2luIiwiX3NoaWZ0Iiwic2Vwd2lkdGgiLCJjb2wiLCJfc2hpZnQyIiwiZGFzaGVzIiwidkxpc3RFbGVtcyIsImhsaW5lIiwibGluZVNoaWZ0IiwiZXFuTnVtQ29sIiwiYWxpZ25NYXAiLCJsIiwibWF0aG1sQnVpbGRlciQ1IiwidGJsIiwiZ2x1ZSIsInRhYmxlIiwibWVuY2xvc2UiLCJjb2x1bW5MaW5lcyIsInByZXZUeXBlV2FzQWxpZ24iLCJpU3RhcnQiLCJpRW5kIiwidHJpbSIsIl9jb2xzIiwicm93TGluZXMiLCJhbGlnbmVkSGFuZGxlciIsInNlcGFyYXRpb25UeXBlIiwiaXNTcGxpdCIsInJlcyIsIm51bU1hdGhzIiwibnVtQ29scyIsImVtcHR5R3JvdXAiLCJhcmcwIiwiTnVtYmVyIiwiaXNBbGlnbmVkIiwic3R5bGluZyIsIm9yZGdyb3VwIiwiY3VyTWF0aHMiLCJzeW1Ob2RlIiwiY29sYWxpZ24iLCJuZGUiLCJjYSIsImNvbEFsaWduIiwicGF5bG9hZCIsImVudmlyb25tZW50cyIsIm5hbWVHcm91cCIsImVudiIsIl9hcmdzIiwicGFyc2VBcmd1bWVudHMiLCJlbmROYW1lVG9rZW4iLCJodG1sQnVpbGRlciQ1IiwibWF0aG1sQnVpbGRlciQ0IiwiZm9udEFsaWFzZXMiLCJmdW5jIiwiYWRqdXN0U3R5bGUiLCJvcmlnaW5hbFN0eWxlIiwiaHRtbEJ1aWxkZXIkNCIsIm5zdHlsZSIsImRzdHlsZSIsIm51bWVybSIsIm51bWVyIiwiY29udGludWVkIiwiaFN0cnV0IiwiZFN0cnV0IiwiZGVub21tIiwiZGVub20iLCJydWxlU3BhY2luZyIsImhhc0JhckxpbmUiLCJiYXJTaXplIiwibnVtU2hpZnQiLCJkZW5vbVNoaWZ0IiwiZnJhYyIsImNhbmRpZGF0ZUNsZWFyYW5jZSIsIm1pZFNoaWZ0IiwiZGVsaW1TaXplIiwibWF0aG1sQnVpbGRlciQzIiwiaXNEaXNwbGF5Iiwid2l0aERlbGltcyIsImxlZnRPcCIsInJpZ2h0T3AiLCJyZXBsYWNlV2l0aCIsInN0eWxBcnJheSIsImRlbGltRnJvbVZhbHVlIiwiZGVsaW1TdHJpbmciLCJiYXJOb2RlIiwiaXNCbGFuayIsInN0eWwiLCJ0ZXh0T3JkIiwiX3JlZjYiLCJodG1sQnVpbGRlciQzIiwiYnJhY2VCb2R5IiwiaXNPdmVyIiwidlNwYW4iLCJtYXRobWxCdWlsZGVyJDIiLCJjb21tYW5kIiwiZm9ybWF0VW5zdXBwb3J0ZWRDbWQiLCJzdHJpbmciLCJ0cnVzdENvbnRleHQiLCJjbGFzcyIsInNwbGl0Iiwia2V5VmFsIiwiaHRtbCIsIm1hdGhtbCIsInNpemVEYXRhIiwidG90YWxoZWlnaHQiLCJhdHRyaWJ1dGVTdHIiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm1hdGhGdW5jdGlvbiIsIm11VW5pdCIsImRpbWVuc2lvbiIsImFsaWdubWVudCIsImZpeCIsIm91dGVyTW9kZSIsInN3aXRjaE1vZGUiLCJjaG9vc2VNYXRoU3R5bGUiLCJkaXNwbGF5Iiwic2NyaXB0c2NyaXB0IiwiYXNzZW1ibGVTdXBTdWIiLCJzdXBHcm91cCIsInN1Ykdyb3VwIiwiYmFzZVNoaWZ0Iiwic3ViSXNTaW5nbGVDaGFyYWN0ZXIiLCJmaW5hbEdyb3VwIiwiX2JvdHRvbSIsInNwYWNlciIsIm5vU3VjY2Vzc29yIiwiaHRtbEJ1aWxkZXIkMiIsImhhc0xpbWl0cyIsImxhcmdlIiwic3Rhc2giLCJvdmFsIiwibWF0aG1sQnVpbGRlciQxIiwib3BlcmF0b3IiLCJzaW5nbGVDaGFyQmlnT3BzIiwiZk5hbWUiLCJzaW5nbGVDaGFySW50ZWdyYWxzIiwiaHRtbEJ1aWxkZXIkMSIsImNoaWxkVGV4dCIsImlzQWxsU3RyaW5nIiwid29yZCIsImlkZW50aWZpZXIiLCJzZW1pc2ltcGxlIiwiYW1vdW50IiwiZHkiLCJzaXppbmdHcm91cCIsImFwcGx5Iiwic2l6ZUZ1bmNzIiwic21hc2hIZWlnaHQiLCJzbWFzaERlcHRoIiwidGJBcmciLCJsZXR0ZXIiLCJzbWFzaGVkTm9kZSIsInRoZXRhIiwicGhpIiwibGluZUNsZWFyYW5jZSIsIm1pbkRlbGltaXRlckhlaWdodCIsImRlbGltRGVwdGgiLCJyb290bSIsInRvU2hpZnQiLCJyb290Vkxpc3QiLCJyb290Vkxpc3RXcmFwIiwic3R5bGVNYXAiLCJuZXdTdHlsZSIsInN0eWxlQXR0cmlidXRlcyIsImh0bWxCdWlsZGVyRGVsZWdhdGUiLCJkZWxlZ2F0ZSIsIl9kZWxlZ2F0ZSIsImlzU3VwIiwiYnVpbGRlckRlbGVnYXRlIiwidmFsdWVCYXNlIiwidmFsdWVTdXAiLCJ2YWx1ZVN1YiIsInN1cG0iLCJzdWJtIiwic3VwU2hpZnQiLCJzdWJTaGlmdCIsIl9uZXdPcHRpb25zIiwibWluU3VwU2hpZnQiLCJpc09paW50IiwibWF4V2lkdGgiLCJwc2kiLCJ2bGlzdEVsZW0iLCJfdmxpc3RFbGVtIiwiaXNCcmFjZSIsIm5vZGVUeXBlIiwiX2Jhc2UiLCJfYmFzZTIiLCJkZWZhdWx0VmFyaWFudCIsImNzc1NwYWNlIiwicmVndWxhclNwYWNlIiwib3JkIiwicGFkIiwicGFkTm9kZSIsInRleHRGb250RmFtaWxpZXMiLCJ0ZXh0Rm9udFdlaWdodHMiLCJ0ZXh0Rm9udFNoYXBlcyIsIm9wdGlvbnNXaXRoRm9udCIsIm1ha2VWZXJiIiwic3RhciIsImZ1bmN0aW9ucyIsInNwYWNlUmVnZXhTdHJpbmciLCJjb250cm9sV29yZFJlZ2V4U3RyaW5nIiwiY29udHJvbFN5bWJvbFJlZ2V4U3RyaW5nIiwiY29udHJvbFdvcmRXaGl0ZXNwYWNlUmVnZXhTdHJpbmciLCJjb250cm9sU3BhY2VSZWdleFN0cmluZyIsImNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya1N0cmluZyIsImNvbWJpbmluZ0RpYWNyaXRpY2FsTWFya3NFbmRSZWdleCIsInRva2VuUmVnZXhTdHJpbmciLCJMZXhlciIsInRva2VuUmVnZXgiLCJjYXRjb2RlcyIsInNldENhdGNvZGUiLCJjaGFyIiwibGV4IiwibGFzdEluZGV4IiwibmxJbmRleCIsIk5hbWVzcGFjZSIsImJ1aWx0aW5zIiwiZ2xvYmFsTWFjcm9zIiwiY3VycmVudCIsInVuZGVmU3RhY2siLCJ1bmRlZnMiLCJ1bmRlZiIsImVuZEdyb3VwcyIsImhhcyIsImV4cGFuZE9uY2UiLCJjb25zdW1lQXJncyIsImRpZ2l0VG9OdW1iZXIiLCJkaWdpdCIsIm5ld2NvbW1hbmQiLCJleGlzdHNPSyIsIm5vbmV4aXN0c09LIiwiZXhpc3RzIiwiaXNEZWZpbmVkIiwiYXJnVGV4dCIsImV4cGFuZE5leHRUb2tlbiIsImxvZyIsImRvdHNCeVRva2VuIiwidGhlZG90cyIsImV4cGFuZEFmdGVyRnV0dXJlIiwic3BhY2VBZnRlckRvdHMiLCJsYXRleFJhaXNlQSIsImJyYWtldEhlbHBlciIsIm9uZSIsIm1pZGRsZURvdWJsZSIsIm9sZE1pZGRsZSIsIm9sZE1pZGRsZURvdWJsZSIsIm1pZE1hY3JvIiwiZG91YmxlIiwiZG91YmxlZCIsImV4cGFuZGVkIiwiaW1wbGljaXRDb21tYW5kcyIsIk1hY3JvRXhwYW5kZXIiLCJleHBhbnNpb25Db3VudCIsImZlZWQiLCJuZXdNb2RlIiwicHVzaFRva2VucyIsInNjYW5Bcmd1bWVudCIsImlzT3B0aW9uYWwiLCJkZWxpbXMiLCJpc0RlbGltaXRlZCIsImV4cGFuZGFibGVPbmx5IiwidG9wVG9rZW4iLCJleHBhbnNpb24iLCJfZ2V0RXhwYW5zaW9uIiwiZXhwYW5kTWFjcm8iLCJvbGRTdGFja0xlbmd0aCIsImRlZmluaXRpb24iLCJjYXRjb2RlIiwic3RyaXBwZWQiLCJib2R5TGV4ZXIiLCJ1bmljb2RlU3ViUmVnRXgiLCJ1U3Vic0FuZFN1cHMiLCJmcmVlemUiLCJ1bmljb2RlQWNjZW50cyIsInVuaWNvZGVTeW1ib2xzIiwiUGFyc2VyIiwicGFyc2UiLCJvbGRUb2tlbiIsImJyZWFrT25JbmZpeCIsImVuZE9mRXhwcmVzc2lvbiIsInBhcnNlQXRvbSIsImZvcm1MaWdhdHVyZXMiLCJoYW5kbGVJbmZpeE5vZGVzIiwib3ZlckluZGV4IiwibnVtZXJOb2RlIiwiZGVub21Ob2RlIiwibnVtZXJCb2R5IiwiZGVub21Cb2R5IiwiaGFuZGxlU3VwU3Vic2NyaXB0Iiwic3ltYm9sVG9rZW4iLCJwYXJzZUdyb3VwIiwidGV4dG9yZEFycmF5IiwiY29sb3JOb2RlIiwic3VwZXJzY3JpcHQiLCJzdWJzY3JpcHQiLCJwcmltZSIsInByaW1lcyIsImlzU3ViIiwiZnVuY0RhdGEiLCJ0b3RhbEFyZ3MiLCJhcmdUeXBlIiwicGFyc2VHcm91cE9mVHlwZSIsIm9wdGlvbmFsIiwicGFyc2VDb2xvckdyb3VwIiwicGFyc2VVcmxHcm91cCIsInBhcnNlQXJndW1lbnRHcm91cCIsInBhcnNlU3RyaW5nR3JvdXAiLCJtb2RlTmFtZSIsImFyZ1Rva2VuIiwicGFyc2VSZWdleEdyb3VwIiwicmVnZXgiLCJmaXJzdFRva2VuIiwibGFzdFRva2VuIiwiZ3JvdXBFbmQiLCJwYXJzZVN5bWJvbCIsImEiLCJ2IiwibnVjbGV1cyIsInBhcnNlVHJlZSIsInRvUGFyc2UiLCJUeXBlRXJyb3IiLCJyZW5kZXIiLCJiYXNlTm9kZSIsInRleHRDb250ZW50IiwicmVuZGVyVG9Eb21UcmVlIiwiY29tcGF0TW9kZSIsInJlbmRlclRvU3RyaW5nIiwiZ2VuZXJhdGVQYXJzZVRyZWUiLCJyZW5kZXJFcnJvciIsInJlbmRlclRvSFRNTFRyZWUiLCJrYXRleCIsInZlcnNpb24iLCJfX3BhcnNlIiwiX19yZW5kZXJUb0RvbVRyZWUiLCJfX3JlbmRlclRvSFRNTFRyZWUiLCJfX3NldEZvbnRNZXRyaWNzIiwiX19kZWZpbmVTeW1ib2wiLCJfX2RlZmluZUZ1bmN0aW9uIiwiX19kZWZpbmVNYWNybyIsIl9fZG9tVHJlZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/katex/dist/katex.mjs\n");
|